这篇文章将为大家详细讲解有关Python项目中的github自动化部署怎么利用Webhook实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强>一。分析需求强>
1。需求说明
在项目开发过程中,我们有时会频繁的更新代码,流程大概为:
(1)本地git push提交代码至git托管平台
(2)登陆到部署有网站源码的线上服务器
(3) cd到项目根目录,执行git拉指令拉取最新代码
整个流程纯手动更新,每次耗时在1分钟左右,这样一天下来,浪费了很多时间在这些琐碎的事情上。
现在的需求的是,在每次本地提交代码后,线上服务器自动拉取最新代码,完成部署更新。即所谓的自动化部署。
2。方案
现在一些主流代码托管平台如github, gitlab, git@osc等均已提供webhook功能,在用户推了代码后,会自动回调一个您设定的http地址。用户可以自己根据不同的需求,来编写自己的脚本程序(比如发邮件,自动部署等),目前,webhook支持多种触发方式,如推动,标签,问题,评论,合并请求等。
附webhook的简介:
webhook就是用户通过自定义回调函数(回调)的方式来改变网络应用的一种行为,这些回调函数可以由不是该网页应用官方的第三方用户或者开发人员来维护,修改。通过webhook,你可以自定义一些行为通知到指定的网址去.Webhook的“自定义回调函数“通常是由一些事件触发的,比如推送代码到代码库或者博客下新增一个评论,源站点会为webhook进行http请求的URI配置。用户通过配置,就可以使一个网站上的事件调用在另一个网站上表现出来,这些事件调用可以是任何事件,但通常应用的是系统集成和消息通知。
方案流程:
所以自动部署主要实现方式就是:
——修改代码按
——github(其他仓库平台)发送请求给你的网站服务器
——网站服务器收到更新请求,执行自动部署脚本
——自动部署脚本执行代码拉取,打包,修改文件等动作完成网站的更新部署
<强>二,具体实现强>
github仓库设置
在github上需要更新的代码仓库添加人,在指定仓库→设置→人
编写github推送回调
Python开启Web服务(钩。py)
import hmac import 操作系统 得到flask import 瓶,,请求,jsonify app =,瓶(__name__) #,github中人的秘密 时间=github_secret & # 39; xxxxxxxx& # 39; def 加密(数据): key 才能=,github_secret.encode (& # 39; utf - 8 # 39;) obj 才能=,hmac.new(钥匙,,味精=数据,,digestmod=& # 39; sha1 # 39;) return 才能;obj.hexdigest () @app.route(& # 39;/钩# 39;,,方法=[& # 39;文章# 39;]) def post_data (): “才能”;“ github才能加密是将文章提交的数据和人的秘密通过hmac的sha1,加密,放到HTTP 头的 X-Hub-Signature才能参数中 “才能”;“ post_data 才能=request.data 时间=token 才能;加密(post_data) #,才能认证签名是否有效 signature 才能=,request.headers.get (& # 39; X-Hub-Signature& # 39;,, & # 39; & # 39;) .split (& # 39;=& # 39;) [1] if 才能;signature  !=,令牌: ,,,return “令牌认证无效“,401年 #,才能运行shell脚本,更新代码 os.system才能(& # 39;sh deploy.sh& # 39;) return 才能;jsonify ({200}“status":) if __name__ ==, & # 39; __main__ # 39;: app.run才能(端口=8989)
编写shell脚本(deploy.sh)
cd“美元(目录名“$ 0,)“
引用>
回声& # 39;Git - - - - - - - - - - - - - - - - - - - - - -拉& # 39;
Git pull
回声& # 39;——造成的- - - - - - & # 39;
回声& # 39;——重启监督——& # 39;
supervisorctl重启博客
回声& # 39;——重载nginx——& # 39;
nginx - s重载
注意:此次部署的钩子上。py和部署。上海都是在仓库的同一目录下
开启服务
Python项目中的github自动化部署怎么利用Webhook实现