代码自动上传及部署

  • 1、引言
  • 2、代码实战
  • 2.1 模块安装
    • 2.2 实现思路
    • 2.3 代码示例
      • 2.3.1 创建监听器
      • 2.3.2 创建事件处理对象
      • 2.3.3 启动事件监听
    • 2.4 启动运行
  • 3、总结

1、引言

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

2、代码实战

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

为了解放同学的双手,小鱼,今天就来搞一个自动上传部署,而且还带监控的功能。

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_DJimport osfrom watchdog.observers import Observer#创建一个监听器,用于监听文件夹目录
observer = Observer()#创建2个事件处理对象
'分别用来监听 [/tmp]目录 、[/opt/project/projectName]目录'

2.3.2 创建事件处理对象

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

# -*- coding:utf-8 -*-
# @Time   : 2022-09-09
# @Author : Carl_DJfrom 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))passelse:# 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_suffixr = 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_DJimport timeif __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知识。

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

  1. Windows下Git使用记录--03 Git GUI与金山快盘组建私人代码仓库进行项目开发

    使用github进行开发的过程中会有一个问题,那就是github不能提供私人的代码仓库,也就是别人完全可以看到你的代码.如果不想别人看到自己的代码,那就得付费购买github的高级服务,或者通过金山快 ...

  2. 如何使用git等工具进行项目和项目代码管理

    一: 代码管理工具,将本地项目同步至新建的git仓库 对于一个使用过SVN, TFS, GIT等多种常用代码管理工具的开发者来说,个人还是更钟情于GIT. 其中基于git的平台又有很多,gitButk ...

  3. Vue3+TypeScript从入门到进阶(八)——项目打包和自动化部署——附沿途学习案例及项目实战代码

    文章目录 一.简介 二.Vue2和Vue3区别 三.Vue知识点学习 四.TypeScript知识点 五.项目实战 六.项目打包和自动化部署 一. 项目部署和DevOps 1.1. 传统的开发模式 1 ...

  4. Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩。

    pdf添加watermark 1. 引言 2.指定水印内容输出到pdf文件 2.1 模块安装 2.2 思路 2.3 代码示例 3.水印内容批量输出到pdf文件 3.1 模块安装 3.2 思路 3.3 ...

  5. python3爬虫项目代码_三个python爬虫项目实例代码

    这篇文章主要介绍了三个python爬虫项目实例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 爬取内涵段子: #encoding=utf-8 i ...

  6. 最值得阅读学习的 10 个 C 语言开源项目代码

    本文转载于: 最值得阅读学习的 10 个 C 语言开源项目代码 从扩展思路的角度来说,一个程序员应该好好读过这样一些代码: 一个操作系统内核 一个编译器(如:gcc,lua) 一个解释器(如:pyth ...

  7. 使用PYTHON统计项目代码行数

    目录 一 使用PYTHON统计项目代码行数 二 应用实例 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 使用PYTHON统计项目代码行数 遇到一个非常小的需求:统计一个项目里头的各类源代码 ...

  8. 【代码规范】google开源c\c++项目代码规范

    版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载;https://blog.csdn.net/csdn_baotai https://blog.csdn.net/csdn_baotai/a ...

  9. 我认真写下9段如翔一般的代码,只为等你来品鉴

    溪源 | 长沙.NET技术社区 开篇 我们总是很容易就能写出满足某个特定功能的代码,却很难写出优雅代码.又最欣赏那些优雅的代码,因为优雅代码更能体现一个开发者的积累. 就像写一篇散文,有的就像初学者不 ...

最新文章

  1. LeetCode简单题之检查是否所有 A 都在 B 之前
  2. 重磅直播 | 多传感器标定原理及方案介绍(阿里云AI Lab)
  3. Atutor、 Claroline、 Moddle及Sakai号称为四大开源课程管理系统
  4. linux用户取消密码,[Linux]linux下取消用户名和密码直接登录
  5. 【DICOMDIR专题】DICOMDIR基础知识及常见问题汇总
  6. PyCherm的常用快捷键总结
  7. HBase之Region上Spilt流程分析
  8. 原生态mysql_mysql基础原生sql教程
  9. 黑科技!颠覆者!区块链,再不关注就晚了
  10. TensorFlow基础篇(七)——tf.nn.conv2d()
  11. ROP_return to dl-resolve学习笔记
  12. 谈谈R中的乱码(二)
  13. wx.getStorage异步和wx.getStorageSync同步区别
  14. 用xshell ssh连接测试服务器时候出的问题
  15. Android Q播放器(编译报错处理)
  16. leetcode | 971. Flip Binary Tree To Match Preorder Traversal(DFS/preorder)
  17. 程序员:如何优雅地装逼
  18. (Web、触屏)微信支付功能调用以及QQ回调地址配置、以及遇到的一些坑
  19. 导入项目时红色小时钟的处理办法
  20. 我们只是虫子!我们真的是虫子吗?

热门文章

  1. tensorflow2.0 新特性 + kaggle练习
  2. 讲解视频质量,视频质量测试,主观客观评价视频质量
  3. JAVA ssm b2b2c多用户商城系统源码
  4. python实现一个简单的项目建议书范文_建议收藏,18个Python迷你项目(附源码)
  5. 用C++写一个三人表决器
  6. python图片RGBA转RGB
  7. 分布式强化学习之D4PG
  8. Autodesk CAD帮助文档总结三 DXF 组码
  9. 汽车理论课后习题matlab程序,汽车理论课后习题程序
  10. 创建EKS Cluster的笔记