最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一. 分析需求

1. 需求說明

在項(xiàng)目開發(fā)過程中,我們有時(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分鐘左右, 這樣一天下來,浪費(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ù)不同的需求,來編寫自己的腳本程序(比如發(fā)郵件,自動(dòng)部署等);目前,webhook支持多種觸發(fā)方式,如Push、 Tag Push、 Issue、評(píng)論、合并請(qǐng)求 等。

附webhook的簡(jiǎn)介:

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

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

python開啟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通過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)證無效", 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 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ù)的同一目錄下

開啟服務(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)文章

  • Python實(shí)現(xiàn)類似jQuery使用中的鏈?zhǔn)秸{(diào)用的示例

    Python實(shí)現(xiàn)類似jQuery使用中的鏈?zhǔn)秸{(diào)用的示例

    chained calls鏈?zhǔn)秸{(diào)用其實(shí)多是指一種方法鏈的程序?qū)懛?這里我們來看一下Python實(shí)現(xiàn)類似jQuery使用中的鏈?zhǔn)秸{(diào)用的示例,首先說明一下什么是鏈?zhǔn)秸{(diào)用:
    2016-06-06
  • python中tab鍵是什么意思

    python中tab鍵是什么意思

    在本篇內(nèi)容里小編給大家整理了關(guān)于python中的tab鍵表示什么意思的相關(guān)內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。
    2020-06-06
  • python中json.dumps()和json.loads()的用法

    python中json.dumps()和json.loads()的用法

    json.dumps()和json.loads()?json.dumps()用于將字典形式轉(zhuǎn)換為字符串,下面這篇文章主要給大家介紹了關(guān)于python中json.dumps()和json.loads()用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 關(guān)于Python時(shí)間日期常見的一些操作方法

    關(guān)于Python時(shí)間日期常見的一些操作方法

    Python的datetime模塊是處理日期和時(shí)間的強(qiáng)大工具,datetime類可以獲取當(dāng)前時(shí)間、指定日期、計(jì)算時(shí)間差、訪問時(shí)間屬性及格式化時(shí)間,這些功能使得在Python中進(jìn)行時(shí)間日期處理變得簡(jiǎn)單高效,需要的朋友可以參考下
    2024-09-09
  • python裝飾器中@property屬性的使用解析

    python裝飾器中@property屬性的使用解析

    這篇文章主要介紹了python裝飾器中@property屬性的使用解析,property屬性是一種用起來像是使用的實(shí)例屬性一樣的特殊屬性,可以對(duì)應(yīng)于某個(gè)方法,需要的朋友可以參考下
    2023-09-09
  • Python導(dǎo)入模塊時(shí)遇到的錯(cuò)誤分析

    Python導(dǎo)入模塊時(shí)遇到的錯(cuò)誤分析

    這篇文章主要給大家詳細(xì)解釋了在Python處理導(dǎo)入模塊的時(shí)候出現(xiàn)錯(cuò)誤以及具體的情況分析,非常的詳盡,有需要的小伙伴可以參考下
    2017-08-08
  • 只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片

    只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片

    第一次寫文章,技術(shù)不成熟之處望各位大神輕噴,今天教大家只用50行Python代碼爬取網(wǎng)絡(luò)美女圖片是怎么操作的,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-06-06
  • Python對(duì)數(shù)據(jù)庫(kù)操作

    Python對(duì)數(shù)據(jù)庫(kù)操作

    本文給大家介紹Windows、Linux下安裝MySQL-python,及安裝過程中常遇到的問題,該如何解決,非常具有參考借鑒價(jià)值,特此分享供大家參考
    2016-03-03
  • pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練

    pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練

    這篇文章主要介紹了pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python 時(shí)間操作例子和時(shí)間格式化參數(shù)小結(jié)

    Python 時(shí)間操作例子和時(shí)間格式化參數(shù)小結(jié)

    這篇文章主要介紹了Python 時(shí)間操作例子,例如取前幾天、后幾天、前一月、后一月等,需要的朋友可以參考下
    2014-04-04

最新評(píng)論

沂水县| 黄大仙区| 台北市| 丹凤县| 灵山县| 镇坪县| 大庆市| 科技| 苍梧县| 塘沽区| 手游| 安义县| 六盘水市| 泰安市| 名山县| 云霄县| 灌云县| 射洪县| 鄢陵县| 泰安市| 威远县| 日喀则市| 巍山| 郁南县| 铜川市| 中江县| 瑞金市| 梧州市| 兰溪市| 舒城县| 福清市| 江都市| 特克斯县| 彭水| 炉霍县| 文安县| 建始县| 库伦旗| 全南县| 寿光市| 永胜县|