电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署

瀏覽:4日期:2022-07-03 18:32:15

一. 分析需求

1. 需求說(shuō)明

在項(xiàng)目開發(fā)過(guò)程中,我們有時(shí)會(huì)頻繁的更新代碼, 流程大概為:

(1) 本地git push提交代碼至git托管平臺(tái)

(2) 登陸到部署有網(wǎng)站源碼的線上服務(wù)器

(3) cd到項(xiàng)目根目錄, 執(zhí)行g(shù)it pull 指令拉取最新代碼

Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署

整個(gè)流程純手動(dòng)更新,每次耗時(shí)在1分鐘左右, 這樣一天下來(lái),浪費(fèi)了很多時(shí)間在這些瑣碎的事情上.

現(xiàn)在的需求是,在每次本地提交代碼后,線上服務(wù)器自動(dòng)拉取最新代碼,完成部署更新.即所謂的自動(dòng)化部署.

2. 方案

現(xiàn)在一些主流代碼托管平臺(tái)如github、 gitlab、git@osc 等均已提供webhook功能,在用戶push了代碼后,會(huì)自動(dòng)回調(diào)一個(gè)您設(shè)定的http地址。 用戶可以自己根據(jù)不同的需求,來(lái)編寫自己的腳本程序(比如發(fā)郵件,自動(dòng)部署等);目前,webhook支持多種觸發(fā)方式,如Push、 Tag Push、 Issue、評(píng)論、合并請(qǐng)求 等。

附webhook的簡(jiǎn)介:

Webhook就是用戶通過(guò)自定義回調(diào)函數(shù)(callback)的方式來(lái)改變Web應(yīng)用的一種行為,這些回調(diào)函數(shù)可以由不是該Web應(yīng)用官方的第三方用戶或者開發(fā)人員來(lái)維護(hù),修改。通過(guò)Webhook,你可以自定義一些行為通知到指定的URL去。Webhook的“自定義回調(diào)函數(shù)”通常是由一些事件觸發(fā)的,比如推送代碼到代碼庫(kù)或者博客下新增一個(gè)評(píng)論,源站點(diǎn)會(huì)為Webhook進(jìn)行HTTP請(qǐng)求的URI配置。用戶通過(guò)配置,就可以使一個(gè)網(wǎng)站上的事件調(diào)用在另一個(gè)網(wǎng)站上表現(xiàn)出來(lái),這些事件調(diào)用可以是任何事件,但通常應(yīng)用的是系統(tǒng)集成和消息通知。

方案流程:

Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署

所以自動(dòng)部署主要實(shí)現(xiàn)方式就是:

- 修改代碼 push

- github(其他倉(cāng)庫(kù)平臺(tái))發(fā)送請(qǐng)求給你的網(wǎng)站服務(wù)器

- 網(wǎng)站服務(wù)器收到更新請(qǐng)求,執(zhí)行自動(dòng)部署腳本

- 自動(dòng)部署腳本執(zhí)行代碼拉取,打包,修改文件等動(dòng)作完成網(wǎng)站的更新部署

二、具體實(shí)現(xiàn)

Github倉(cāng)庫(kù)設(shè)置

在GitHub上需要更新的代碼倉(cāng)庫(kù)添加webhooks, 在指定倉(cāng)庫(kù)→settings→webhooks

Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署

編寫GitHub推送回調(diào)

python開啟web服務(wù)(hook.py)

import hmacimport osfrom flask import Flask, request, jsonifyapp = Flask(__name__)# github中webhooks的secretgithub_secret = ’xxxxxxxx’def encryption(data): key = github_secret.encode(’utf-8’) obj = hmac.new(key, msg=data, digestmod=’sha1’) return obj.hexdigest()@app.route(’/hook’, methods=[’POST’])def post_data(): ''' github加密是將post提交的data和WebHooks的secret通過(guò)hmac的sha1加密,放到HTTP headers的 X-Hub-Signature參數(shù)中 ''' post_data = request.data token = encryption(post_data) # 認(rèn)證簽名是否有效 signature = request.headers.get(’X-Hub-Signature’, ’’).split(’=’)[-1] if signature != token: return 'token認(rèn)證無(wú)效', 401 # 運(yùn)行shell腳本,更新代碼 os.system(’sh deploy.sh’) return jsonify({'status': 200})if __name__ == ’__main__’: app.run(port=8989)

編寫shell腳本(deploy.sh)

cd '$(dirname '$0')'echo ’--------Git pull------------’git pullecho ’-----Already up-to-date------’echo ’----- restart supervision-----’supervisorctl restart blogecho ’----- reload nginx-----’nginx -s reload

注意: 此次部署的hook.py 和deploy.sh都是在倉(cāng)庫(kù)的同一目錄下

開啟服務(wù)

supervisor部署webhook

[program:webhook]directory=/data/wwwroot/docscommand=/home/dukenan/.envs/flask_py3/bin/python3 hook.pyautostart=trueautorestart=falsestartsecs=1;使用root賬戶user=rootstderr_logfile=/etc/supervisor/logs/webhooks/stderr.log stdout_logfile=/etc/supervisor/logs/webhooks/stdout.log redirect_stderr=trueloginfo=info

部署NGINX的參考

server { listen 80; server_name 服務(wù)器IP; # 配置域名 client_max_body_size 300M; location / { proxy_pass http://127.0.0.1:8989; #轉(zhuǎn)發(fā)本地8989端口 proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 车载加油机品牌_ 柴油加油机厂家 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 定坤静电科技静电消除器厂家-除静电设备| 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 北京亦庄厂房出租_经开区产业园招商信息平台 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 贵州成人高考网_贵州成考网| 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 熔体泵_熔体出料泵_高温熔体泵-郑州海科熔体泵有限公司 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 |