iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >太牛了,用Python实现服务部署自动化!
  • 271
分享到

太牛了,用Python实现服务部署自动化!

Python命令 2023-05-14 22:05:37 271人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 mv 命令将压缩文件移动到 Nginx 项目设定目录,最后使用 unzip 命令解压文件,以此完成项目的部署。仔细分

太牛了,用Python实现服务部署自动化!

最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 mv 命令将压缩文件移动到 Nginx 项目设定目录,最后使用 unzip 命令解压文件,以此完成项目的部署。

仔细分析,大部分操作都是重复性的动作,人工去完成这些操作会大大降低工作效率。

本篇文章将介绍如何利用 python 监控文件夹,以此辅助完成服务的部署动作。

1. 准备

这里要介绍一个 Python 依赖库「 watchdog 」

它可用于监控某个文件目录下的文件变化,包含:删除、修改、新增等操作,每一个操作都会回调一个事件函数,我们可以在内部编写自定义的逻辑,以此满足我们的需求。

# 安装依赖包
pip3 install watchdog

项目地址:

https://www.PHP.cn/link/47841cc9e552bd5c40164db7073b817b​​

2. 实战一下

首先,我们需要创建一个监听器,用于监听文件夹目录:

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

然后,创建 2 个事件处理对象。

PS:该对象继承于「 FileSystemEventHandler 」类。

它们分别用于监听「 /tmp 」目录、「 /home/project/frontend 」目录,假设事件对象被命名为 obj1、obj2

obj1 负责监听 /tmp 目录,重写「 新建或修改 」事件方法,完成压缩文件的移动操作:

from watchdog.events import *
import ntpath
import shutil
import zipfile
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(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))

obj2 负责监听 /home/project/frontend 目录,同样重写「 新建或修改 」事件方法,完成压缩文件的解压动作:

...
 def start(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('这不是一个正常的zip压缩包!')
...

接着,通过监听器启动上面两个事件的监听任务:

import time
...
if __name__ == "__main__":
 # 待监听的文件夹目录
 watch_folder = "/tmp/"
 # 项目目标文件夹目录
 target_folder = "/home/project/frontend/"
 # 监听文件夹名称,即:项目压缩包名称
 watch_tags = ['proj1.zip', 'proj2.zip', 'proj3.zip', 'proj4.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()
...

最后,我们在服务器上通过「 nohup 」命令,让文件监听程序在后台运行即可。

# 在后台运行
# 项目文件:watch_folder.py
# 日志文件:watch_folder.log
nohup python3 -u watch_folder.py > watch_folder.log 2>&1 &
# 查看日志:
cat watch_folder.log

3. 总结

通过上面的操作,每次我通过堡垒机将前端 zip 压缩项目文件上传到应用服务器的 /tmp 目录下,程序会自动进行后面的操作,自动完成应用部署。

我已经将文中源码上传到后台,回复关键字「 watchdog 」获取完整的源码。

如果你觉得文章还不错,请大家 点赞、分享、因为这将是我持续输出更多优质文章的最强动力!

以上就是太牛了,用Python实现服务部署自动化!的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 太牛了,用Python实现服务部署自动化!

本文链接: https://www.lsjlt.com/news/205824.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 太牛了,用Python实现服务部署自动化!
    最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 mv 命令将压缩文件移动到 Nginx 项目设定目录,最后使用 unzip 命令解压文件,以此完成项目的部署。仔细分...
    99+
    2023-05-14
    Python 命令
  • 怎么用Python实现服务部署自动化
    这篇“怎么用Python实现服务部署自动化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Python实现服务部署自动化...
    99+
    2023-07-06
  • windows中python实现自动化部署
    目录一、python脚本二、windows部署定时任务这段时间遇到一个需求是如果库里面有没有图片的数据,则访问我们的网站生成图片数据并更新库,要求每隔一段时间就要检测。 该需求主要为...
    99+
    2024-04-02
  • 云服务器自动化部署怎么实现
    实现云服务器的自动化部署可以通过以下几个步骤来实现:1. 配置云服务器环境:首先需要在云平台上创建一个虚拟机实例,并配置好所需要的操...
    99+
    2023-09-16
    云服务器
  • docker自动化部署怎么实现
    要实现Docker的自动化部署,可以采用以下步骤:1. 编写Dockerfile:根据项目需求编写Dockerfile文件,定义Do...
    99+
    2023-08-12
    docker
  • Springboot服务Docker化自动部署的实现方法
    还在手动将springboot项目打包,然后上传服务器,手动执行启动命令将项目启动吗?你out了!通过Docker配置DockerMaven插件,快速部署,一键将springboot...
    99+
    2024-04-02
  • 利用Python实现自动化监控文件夹完成服务部署
    目录1. 准备2. 实战一下3. 总结大家好,我是安果! 最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 ...
    99+
    2024-04-02
  • 怎么在Springboot服务中实现自动化部署Docker
    怎么在Springboot服务中实现自动化部署Docker?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。微服务部署方式(1)手动部署:首先基于源码打包生成jar包(或war...
    99+
    2023-06-14
  • Node中怎么实现自动化部署
    这期内容当中小编将会给大家带来有关Node中怎么实现自动化部署,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。配置脚本这段脚本内容是我们需要服务器自动执行的# a...
    99+
    2024-04-02
  • jenkins+shell自动化部署怎么实现
    这篇文章主要介绍了jenkins+shell自动化部署怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jenkins+shell自动化部署怎么实现文章都会有所收获,下面我们一起来看看吧。通过jenkins...
    99+
    2023-06-29
  • Maven+Tomcat8 实现自动化部署的方法
    本文介绍了Maven+Tomcat8 实现自动化部署的方法,分享给大家,具体如下:1.配置tomcat-users.xml首先在Tomcat里配置deploy的用户(tomcat根目录/conf/tomcat-users.xml):<...
    99+
    2023-05-31
    maven tomcat8 自动部署
  • Jenkins中怎么实现Pipeline自动化部署
    本篇文章给大家分享的是有关Jenkins中怎么实现Pipeline自动化部署,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用Jenkins前的一些设置为了快速搭建Jenkin...
    99+
    2023-06-19
  • 怎么搭建jenkins实现自动化部署
    要搭建Jenkins实现自动化部署,您需要按照以下步骤进行操作:1. 安装Jenkins:您可以从Jenkins官方网站下载适用于您...
    99+
    2023-08-12
    jenkins
  • 微服务架构中如何实现服务的自动化部署?
    随着互联网的不断发展,应用程序规模和需求量不断扩大,如何以更快、更可靠、更灵活的方式部署和管理服务成为了一项重要的挑战。为了满足这个需求,微服务架构应运而生。与传统的单体应用不同,微服务架构将应用拆分成了一系列小而自治的服务,每个服务专注于...
    99+
    2023-05-16
    服务 微服务架构 自动化部署
  • maven实现docker自动化部署插件的使用
    构建开发项目 首先打开我们的IDEA构建一个我们的开发项目,配置如下: 接着打开我们的pom.xml修改build的配置,修改以后的代码如下: <build> ...
    99+
    2024-04-02
  • Python自动化脚本部署服务器的方法
    本篇内容主要讲解“Python自动化脚本部署服务器的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python自动化脚本部署服务器的方法”吧! 1. 前言日常编写的 Python ...
    99+
    2023-06-15
  • Jenkins自动化部署SpringBoot项目的实现
    目录1、Jenkins介绍1.1、概念1.2、优势1.3、Jenkins目的2、环境准备3、Jenkins下载3.1、下载3.2、运行3.3、问题解决4、Jenkins配置4.1、用...
    99+
    2023-01-13
    Jenkins自动化部署SpringBoot Jenkins部署SpringBoot
  • 怎么用NFV+SDN实现VNF全自动化部署
    本篇内容介绍了“怎么用NFV+SDN实现VNF全自动化部署”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、某运营商期望通过数字化转型项目提...
    99+
    2023-06-03
  • 如何利用Gitlab和Kubernetes实现自动化部署
    GitlabK8s自动化部署随着云计算和容器化技术的普及,企业越来越多地将应用程序部署在 Kubernetes 上。而为了更好地管理 Kubernetes 环境中的应用程序,越来越多的企业选择使用 Gitlab 和 Kubernetes 的...
    99+
    2023-10-22
  • 用python脚本实现自动部署环境(二)
    之前写了一个博客是关于paramiko的安装的 就是为了今天的博客打基础 今天就记录下怎么用paramiko模块对环境进行部署(贴出来关键的脚本片段,总不能一直做伸手党吧,自己写点儿东西如果想用我这个方法的话) 对于我们现有的系统的测试环...
    99+
    2023-01-31
    脚本 环境 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作