完整的解决方案:Python实现自动化布署

优采云 发布时间: 2020-08-30 04:17

  Python实现自动化布署

  一. 分析需求

  1. 需求说明

  在项目开发过程中,我们有时会频繁的更新代码, 流程大约为:

  (1) 本地git push递交代码至git托管平台

  (2) 登陆到布署有网站源码的线上服务器

  (3) cd到项目根目录, 执行git pull指令拉取最新代码

  

  整个流程纯自动更新,每次历时在1分钟左右, 这样三天出来,浪费了好多时间在这种繁杂的事情上.

  现在的需求是,在每次本地递交代码后,线上服务器手动拉取最新代码,完成布署更新.即所谓的自动化布署.

  2. 方案

  现在一些主流代码托管平台如github、 gitlab、git@osc等均已提供webhook功能,在用户push了代码后,会手动反弹一个您设定的http地址。 用户可以自己按照不同的需求,来编撰自己的脚本程序(比如发邮件,自动布署等);目前,webhook支持多种触发形式,如Push、 Tag Push、 Issue、评论、合并恳求等

  

  附webhook的简介:

  Webhook就是用户通过自定义回调函数(callback)的方法来改变Web应用的一种行为,这些回调函数可以由不是该Web应用官方的第三方用户或则开发人员来维护,修改。通过Webhook,你可以自定义一些行为通知到指定的URL去。Webhook的“自定义回调函数”通常是由一些风波触发的,比如推送代码到代码库或者博客下新增一个评论,源站点会为Webhook进行HTTP恳求的URI配置。用户通过配置,就可以让一个网站上的风波调用在另一个网站上表现下来,这些风波调用可以是任何风波,但一般应用的是系统集成和消息通知。

  3. 分析怎样实现

  (1) 编写一个web插口,以便于接收由webhook发出的数据恳求

  (2) 在该web插口, 接收到的post消息中富含多个参数,包括分支信息,commit信息

  (3) 根据分支信息和commit信息判定是否须要更新,如果无需更新,结束

  (4) 需要更新,开始切换用户,获取更新权限,写入参数到文本文件中,避免因切换参数造成参数遗失

  (5) 从文本文件中读取参数,传递分支参数,调用富含git pull等指令的手动布署脚本,开始执行布署操作

  (6) 将收录这个插口的web服务放到你网站源码所在的服务器上,开启后台运行(使用nohup指令或supervisor守护进程)

  (7) 将这个插口的url路由地址配置在代码托管平台的webhook功能中

  (8) 测试更新代码,接收到webhook推送的消息数据, 执行自动化更新,完毕

  二. 代码实现

  特殊说明

  (1) 本篇文章使用python脚本 + tornado框架搭建web服务器,用于接收git代码托管平台的webhook消息推送.

  (2) git代码托管平台以Git@OSC为例,其他托管平台与之类似.

  (3) 本篇文章中执行自动化布署指令的前提是早已配置了ssh

  (4) 以下代码仅测试的是更新主分支,其他操作与之类似.

  下图是这个脚本的整体目录

  

  备注: 红色标记的才是关键代码,其他文件是一些日志和虚拟环境等无关紧要的文件

  1. 编写一个web插口,以便于接收由webhook发出的数据恳求

  

  

  2.编写一个配置文件config.json,用于储存git@osc所需的验证密码参数、需要布署的项目根目录、需要执行的git指令

  

  3. 编写接收到webhook消息时须要执行的脚本

  

  4. 挂载到我们布署的网站服务器上,开启后台运行(本篇文章以守护进程形式启动)

  

  5. 将这个插口的url路由地址配置在代码托管平台的webhook功能中

  

  6. 测试更新代码,接收到webhook推送的消息数据, 执行自动化更新,完毕

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线