Python3,仅仅2段代码,就实现项目代码自动上传及部署,再也不需要Jenkins了。

这篇具有很好参考价值的文章主要介绍了Python3,仅仅2段代码,就实现项目代码自动上传及部署,再也不需要Jenkins了。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、引言

小鱼:你在手动打包,要先rm - rf ,再 go away ??
小屌丝:鱼哥,你在说啥嘞, 我可是正经人…
小鱼:那你干啥,手动打包,没有Jenkins吗,没有自动打包工具吗?
小屌丝:如果能Jenkins自动发布,我还干啥费劲的执行手动打包。
小鱼:不能Jenkins?跨域了? 不能安装? 还是不会自动打包?
小屌丝:一来是跨域,其次,无法在目标服务器部署Jenkins,所以,只能手动打包上传…
小鱼:这样啊, 那你你应该庆幸,你遇到我了。。。。
小屌丝:鱼哥,那你的意思,你有好的方法了!
小鱼:必须的,今天分享一个,不用Jenkins,只用区区2段代码,就完成项目自动上传和部署。
小屌丝:鱼哥, v5 ~ ~
Python3,仅仅2段代码,就实现项目代码自动上传及部署,再也不需要Jenkins了。

2、代码实战

在实际的工作中,遇到小屌丝的那种情况,也是很常见的。
发版的时候,需要部署到客户的服务器,但是,客户的服务器,对安装软件有着非常严格的要求,这个时候,
大部分的同学,都是手动打包,上传,部署。

为了解放同学的双手,小鱼,今天就来搞一个自动上传部署,而且还带监控的功能。
Python3,仅仅2段代码,就实现项目代码自动上传及部署,再也不需要Jenkins了。

2.1 模块安装

我们需要依赖python的第三方库就是:watchdog

老规矩,pip 安装

pip install watchdog

其它安装方式,直接看这两篇:

  • Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
  • Python3:我低调的只用一行代码,就导入Python所有库!

2.2 实现思路

在撸码前, 常规操作是,思考+规划 = 实现思路:

  • 创建监听器;
  • 创建事件处理对象;
  • 执行监听器,监听事件处理对象;
  • 在服务器执行脚本;

有了明确的思路,我们就来事撸码。

2.3 代码示例

2.3.1 创建监听器

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-09-09
# @Author : Carl_DJ

import os

from watchdog.observers import Observer

#创建一个监听器,用于监听文件夹目录
observer = Observer()

#创建2个事件处理对象
'分别用来监听 [/tmp]目录 、[/opt/project/projectName]目录'

2.3.2 创建事件处理对象

代码示例一对/tmp文件进行监听

# -*- coding:utf-8 -*-
# @Time   : 2022-09-09
# @Author : Carl_DJ

from watchdog.events import *
import ntpath
import shutil
import zipfile
'''
实现功能:
 1、负责 监听 /tmp 目录,
 2、事件方法:新建&修改
 3、执行压缩文件移动
'''

def get_filename(filepath):
    """
    根据文件夹目录,获取文件名称(带后缀名)
    :param filepath:
    :return:
    """
    return ntpath.basename(filepath)

class FileMoveHandler(FileSystemEventHandler):
    def __init__(self):
        FileSystemEventHandler.__init__(self)

    # 文件新建
    def on_created(self, event):
        # 新建文件夹
        if event.is_directory:
            # print("directory created:{0}".format(event.src_path))
            pass
        # 新建文件
        else:
            # print("file created:{0}".format(event.src_path))
            filename = get_filename(event.src_path)

            # 如果属于前端的4个项目压缩包,开始文件夹的操作
            if filename in watch_tags:
                self.start(filename)
                
   def on_modified(self, event):
        if event.is_directory:
            # print("directory modified:{0}".format(event.src_path))
            pass
        else:
            # print("file modified:{0}".format(event.src_path))
            filename = get_filename(event.src_path)
            if filename in watch_tags:
                self.start(filename)
                
        def start_tmp(self, filename):
        """
        文件处理逻辑
        :param filename:
        :return:
        """
        try:
            # 文件名不带后缀
            filename_without_suffix = filename.split(".")[0]

            # 源文件路径(压缩包文件)
            source_file_path = watch_folder + filename

            # 目标文件路径(压缩包文件)
            target_file_path = target_folder + filename

            # 目标项目文件夹(目标项目)
            target_project_path = target_folder + filename_without_suffix

            # 1、复制文件到目标文件夹
            print(f"拷贝源目录{source_file_path},目标文件夹:{target_folder}")
            # 删除目标文件夹下的压缩文件
            if os.path.exists(target_file_path):
                os.remove(target_file_path)
            # 移动文件到目标文件夹中
            shutil.move(source_file_path, target_folder)

            # 2、清空目标文件夹中内的所有文件夹(如果存在)
            # 如果不存在,新建一个文件夹
            if os.path.exists(target_project_path):
                shutil.rmtree(target_project_path, ignore_errors=True)

            print(f"项目{filename_without_suffix}移动成功!")
        except Exception as e:
            print("部署失败,错误原因:", str(e.args))

代码示例二对//opt/project/projectName文件进行监听

# -*- coding:utf-8 -*-
# @Time   : 2022-09-09
# @Author : Carl_DJ

...
    def start_opt(self, filename):
        # 文件名不带后缀
        filename_without_suffix = filename.split(".")[0]
        # 目标文件路径(压缩包文件)
        target_file_path = target_folder + filename

        # 目标项目文件夹(目标项目)
        target_project_path = target_folder + filename_without_suffix
        r = zipfile.is_zipfile(target_file_path)
        if r:
            fz = zipfile.ZipFile(target_file_path, 'r')
            for file in fz.namelist():
                fz.extract(file, target_folder)
        else:
            print('压缩包出现问题,无法进行解压操作!')

2.3.3 启动事件监听

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-09-09
# @Author : Carl_DJ

import time

if __name__ == "__main__":
    # 待监听的文件夹目录
    watch_folder = "/tmp/"

    # 项目目标文件夹目录
    target_folder = "/opt/project/projectName/"

    # 监听文件夹名称,即:项目压缩包名称
    watch_tags = ['project1.zip', 'project2.zip']

    # 创建一个监听器,用来监听文件夹目录
    observer = Observer()

    # 创建两个事件处理对象
    move_handler = FileMoveHandler()
    unzip_handler = FileUnzipHandler()

    # 启动监控任务
    # 参数分别是:观察者、监听目录、是否监听子目录
    observer.schedule(move_handler, watch_folder, True)
    observer.schedule(unzip_handler, target_folder, True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()


2.4 启动运行

最后,我们就在目标服务器,启动运行脚本。

文件命名:

  • 脚本文件:watchdog_folder.py
  • 日志文件:watchdog_floder.log
nohup python3 -u watchdog_folder.py > watchdog_floder.log 2>&1 &

3、总结

看到这里,今天的分享差不多就结束了。
回顾一下,今天的的内容,大体思路:
创建监听器→再创建事件处理对象启动监听器,对事件进行监听处理→最后在服务器上启动命令执行

一套行云流水的动作,就完成了项目代码自动上传,监控,部署等动作,

妈妈再也不用担心我打包部署花费时间了。

最后,再唠叨一句:
我是小鱼
- CSDN博客专家
- 51Testing认证讲师

关注我,带你学习更多更有趣的Python知识。文章来源地址https://www.toymoban.com/news/detail-442797.html

到了这里,关于Python3,仅仅2段代码,就实现项目代码自动上传及部署,再也不需要Jenkins了。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python3对接godaddy API,实现自动更改域名解析(DDNS)

    文章开始前,先解释下如下问题: ①什么是域名解析? 域名解析一般是指通过一个域名指向IP地址(A解析),然后我们访问这个域名就可以有直接访问这个IP地址的效果,只需要记住域名即可,无需记住IP。 ②什么是DDNS? DDNS是动态域名解析,一个域名可以根据IP的变化,自动

    2024年02月11日
    浏览(38)
  • uniapp:HbuildeX项目实现jenkins自动化打包上传

    前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打包。 大致流程:

    2024年02月16日
    浏览(62)
  • pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化

    目录 接口自动化测试框架(用例自动生成) 项目说明 技术栈 环境部署 框架流程图与目录结构图及相关说明 1、框架流程图如下 2、代码目录结构图如下 关联详解 函数助手详解 代码设计与功能说明 1、定义运行配置文件 runConfig.yml 2、接口配置文件 apiConfig.ini 3、测试用例的设

    2024年02月09日
    浏览(151)
  • 用Python的requests库实现自动上传文件

    女朋友下班后听她吐槽自己领导安排了一件又要让她加班的工作。大致任务是:在公司网址上为近10万客户上传签订的合同的基础信息并上传对应的资料附件。月底前必须完成,人工一天才传了1000左右,按这个节奏根本完不成。 为了不让她加班,这边写了一个小脚本来实现自

    2024年02月11日
    浏览(27)
  • [含完整代码]Linux使用.sh脚本自动部署(启动|停止|状态|日志)项目[超详细]

    个人博客: www.wdcdbd.com   我们在linux部署.jar项目时,都需要通过java -jar的形式来部署,每次都要手动停止,部署,这样用起来会很麻烦。所以,这篇文章就是自己通过.sh脚本一键 启动 , 停止 , 重启 , 查看状态 , 查看日志 。这样会方便一些。  将你的java项目放到你lin

    2024年01月19日
    浏览(55)
  • Python(35):Python3 通过https上传文件和下载文件

    Python http方式的下载,参考:https://blog.csdn.net/fen_fen/article/details/113753983 https需要先安装需要的模块 1.1、调用: 1.2、上传代码  2.1、下载调用: 2.2、Python3 https下载文件工具类:

    2024年01月23日
    浏览(49)
  • Jenkins+Gitlab实现代码自动构建部署

    一、环境准备 主机名 ip 安装软件 jenkins 192.168.75.149 jenkins gitlab 192.168.75.147 gitlab web 192.168.75.155 部署应用 二、jenkins服务器配置 1、生产公钥 (2)获取公钥信息 公钥信息在配置 Gitlab SSH Keys 时用到。 (3)获取私钥信息 私钥信息在配置 Jenkins Publish over SSH 时用到。 (4)复制公

    2024年02月16日
    浏览(63)
  • Jenkins+Docker 实现一键自动化部署项目

    1.安装Jenkins 注:因为Jenkins容器里的用户是Jenkins,而主机用户不是Jenkins,就算是root也一样会报错:/var/jenkins_home/copy_reference_file.log: Permission denied,这个时候就需要在主机上面给主机地址赋予访问Jenkins容器的权限,Jenkins内部用的是uid 1000的user。 -privileged=true让容器具有root权限

    2024年02月16日
    浏览(50)
  • Jenkins + Gitlab 实现项目自动化构建及部署

      通俗来讲就是本地项目 push 到 gitlab 后, Jenkins 能够识别到项目的更新并自动构建部署;  本文以实际操作的方式来表述详细配置过程及避开配置 Jenkins 时的坑. 默认电脑已经安装了虚拟机, 默认gitlab 上已经有了你想要部署的项目, 部署了 maven 和 jdk 并配置了环境变量!!! 1 执行

    2024年02月16日
    浏览(57)
  • python项目结构示例(python代码结构、python目录结构)与python部署结构、python部署目录、flask项目结构、flask目录

    myproject/ :项目的根目录,也是Python包的根目录。 myproject/__init__.py :一个空的 __init__.py 文件,用于将 myproject 目录标记为一个Python包。 myproject/module1.py 、 myproject/module2.py 等:项目的模块文件,包含项目的核心代码。 tests/ :测试目录,包含用于测试项目代码的测试文件。

    2024年02月12日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包