欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年11月28日 16:17:27   作者:-零  
這篇文章主要介紹了Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一. 分析需求

1. 需求說(shuō)明

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

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

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

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

整個(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)編寫(xiě)自己的腳本程序(比如發(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)用官方的第三方用戶或者開(kāi)發(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)集成和消息通知。

方案流程:

所以自動(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

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

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

import hmac
import os
from flask import Flask, request, jsonify

app = Flask(__name__)
# github中webhooks的secret
github_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)

編寫(xiě)shell腳本(deploy.sh)

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

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

開(kāi)啟服務(wù)

supervisor部署webhook

[program:webhook]
directory=/data/wwwroot/docs
command=/home/dukenan/.envs/flask_py3/bin/python3 hook.py
autostart=true
autorestart=false
startsecs=1
;使用root賬戶
user=root
stderr_logfile=/etc/supervisor/logs/webhooks/stderr.log 
stdout_logfile=/etc/supervisor/logs/webhooks/stdout.log 
redirect_stderr=true
loginfo=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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytorch 固定部分參數(shù)訓(xùn)練的方法

    pytorch 固定部分參數(shù)訓(xùn)練的方法

    今天小編就為大家分享一篇pytorch 固定部分參數(shù)訓(xùn)練的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python爬蟲(chóng)之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)

    Python爬蟲(chóng)之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了Python爬蟲(chóng)之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Python報(bào)錯(cuò)AssertionError:can only test a child proc問(wèn)題

    Python報(bào)錯(cuò)AssertionError:can only test a c

    這篇文章主要介紹了Python報(bào)錯(cuò)AssertionError:can only test a child proc問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python3訪問(wèn)字典里的值實(shí)例方法

    python3訪問(wèn)字典里的值實(shí)例方法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python3訪問(wèn)字典里的值實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-11-11
  • python中用shutil.move移動(dòng)文件或目錄的方法實(shí)例

    python中用shutil.move移動(dòng)文件或目錄的方法實(shí)例

    在python操作中大家對(duì)os,shutil,sys,等通用庫(kù)一定不陌生,下面這篇文章主要給大家介紹了關(guān)于python中用shutil.move移動(dòng)文件或目錄的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python datetime模塊使用方法小結(jié)

    Python datetime模塊使用方法小結(jié)

    這篇文章主要介紹了Python datetime模塊使用方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 解決Python requests庫(kù)編碼 socks5代理的問(wèn)題

    解決Python requests庫(kù)編碼 socks5代理的問(wèn)題

    今天小編就為大家分享一篇解決Python requests庫(kù)編碼 socks5代理的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python批量生成特定尺寸圖片及圖畫(huà)任意文字的實(shí)例

    Python批量生成特定尺寸圖片及圖畫(huà)任意文字的實(shí)例

    今天小編就為大家分享一篇Python批量生成特定尺寸圖片及圖畫(huà)任意文字的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • pytorch中節(jié)約顯卡內(nèi)存的方法和技巧

    pytorch中節(jié)約顯卡內(nèi)存的方法和技巧

    顯存不足是很多人感到頭疼的問(wèn)題,畢竟能擁有大量顯存的實(shí)驗(yàn)室還是少數(shù),而現(xiàn)在的模型已經(jīng)越跑越大,模型參數(shù)量和數(shù)據(jù)集也越來(lái)越大,所以這篇文章給大家總結(jié)了一些pytorch中節(jié)約顯卡內(nèi)存的方法和技巧,需要的朋友可以參考下
    2023-11-11
  • python3爬蟲(chóng)中多線程的優(yōu)勢(shì)總結(jié)

    python3爬蟲(chóng)中多線程的優(yōu)勢(shì)總結(jié)

    在本篇文章里小編給大家分享了一篇關(guān)于python3爬蟲(chóng)中多線程的優(yōu)勢(shì)總結(jié)內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。
    2020-11-11

最新評(píng)論