欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學堂Python培訓之如何使用GitHub實現(xiàn)持續(xù)部署方法

2019-05-09 14:22:50 3543瀏覽

今天千鋒扣丁學堂Python培訓老師給大家介紹一下關于如何使用GitHub和Python實現(xiàn)持續(xù)部署方法的詳細介紹,首先借助GitHub的網絡鉤子webhook,開發(fā)者可以創(chuàng)建很多有用的服務。從觸發(fā)一個Jenkins實例上的CI(持續(xù)集成)任務到配置云中的機器,幾乎有著無限的可能性。這篇教程將展示如何使用Python和Flask框架來搭建一個簡單的持續(xù)部署(CD)服務。



在這個例子中的持續(xù)部署服務是一個簡單的Flask應用,其帶有接受GitHub的網絡鉤子webhook請求的REST端點endpoint。在驗證每個請求都來自正確的GitHub倉庫后,服務器將拉取pull更改到倉庫的本地副本。這樣每次一個新的提交commit推送到遠程GitHub倉庫,本地倉庫就會自動更新。

Flaskweb服務

用Flask搭建一個小的web服務非常簡單。這里可以先看看項目的結構。

├── app
│  ├── __init__.py
│  └── webhooks.py
├── requirements.txt
└── wsgi.py

首先,創(chuàng)建應用。應用代碼在app目錄下。

兩個文件(__init__.py和webhooks.py)構成了Flask應用。前者包含有創(chuàng)建Flask應用并為其添加配置的代碼。后者有端點endpoint邏輯。這是該應用接收GitHub請求數據的地方。

這里是app/__init__.py的內容:

import os
from flask import Flask
from .webhooks import webhook
def create_app():
 """ Create, configure and return the Flask application """
 app = Flask(__name__)
 app.config['GITHUB_SECRET'] = os.environ.get('GITHUB_SECRET')
 app.config['REPO_PATH'] = os.environ.get('REPO_PATH')
 app.register_blueprint(webhook)
 return(app)

該函數創(chuàng)建了兩個配置變量:

GITHUB_SECRET保存一個密碼,用來認證GitHub請求。

REPO_PATH保存了自動更新的倉庫路徑。

這份代碼使用Flask藍圖FlaskBlueprints來組織應用的端點endpoint。使用藍圖可以對API進行邏輯分組,使應用程序更易于維護。通常認為這是一種好的做法。

這里是app/webhooks.py的內容:

import hmac
from flask import request, Blueprint, jsonify, current_app 
from git import Repo
webhook = Blueprint('webhook', __name__, url_prefix='')
@webhook.route('/github', methods=['POST']) 
def handle_github_hook(): 
 """ Entry point for github webhook """
 signature = request.headers.get('X-Hub-Signature') 
 sha, signature = signature.split('=')
 secret = str.encode(current_app.config.get('GITHUB_SECRET'))
 hashhex = hmac.new(secret, request.data, digestmod='sha1').hexdigest()
 if hmac.compare_digest(hashhex, signature): 
  repo = Repo(current_app.config.get('REPO_PATH')) 
  origin = repo.remotes.origin 
  origin.pull('--rebase')
  commit = request.json['after'][0:6]
  print('Repository updated with commit {}'.format(commit))
 return jsonify({}), 200

首先代碼創(chuàng)建了一個新的藍圖webhook。然后它使用Flaskroute為藍圖添加了一個端點。任何請求/GitHubURL端點的POST請求都將調用這個路由。

驗證請求

當服務在該端點上接到請求時,首先它必須驗證該請求是否來自GitHub以及來自正確的倉庫。GitHub在請求頭的X-Hub-Signature中提供了一個簽名。該簽名由一個密碼(GITHUB_SECRET),請求體的HMAC十六進制摘要,并使用sha1哈希生成。

為了驗證請求,服務需要在本地計算簽名并與請求頭中收到的簽名做比較。這可以由hmac.compare_digest函數完成。

自定義鉤子邏輯

在驗證請求后,現(xiàn)在就可以處理了。這篇教程使用GitPython模塊來與git倉庫進行交互。GitPython模塊中的Repo對象用于訪問遠程倉庫origin。該服務在本地拉取origin倉庫的最新更改,還用--rebase選項來避免合并的問題。

調試打印語句顯示了從請求體收到的短提交哈希。這個例子展示了如何使用請求體。更多關于請求體的可用數據的信息,請查詢GitHub文檔。

最后該服務返回了一個空的JSON字符串和200的狀態(tài)碼。這用于告訴GitHub的網絡鉤子服務已經收到了請求。

部署服務

為了運行該服務,這個例子使用gunicornweb服務器。首先安裝服務依賴。在支持的Fedora服務器上,以sudo運行這條命令:

sudo dnf install python3-gunicorn python3-flask python3-GitPython

現(xiàn)在編輯gunicorn使用的wsgi.py文件來運行該服務:

from app import create_app
application = create_app()

為了部署服務,使用以下命令克隆這個git倉庫或者使用你自己的git倉庫:

git clone https://github.com/cverna/github_hook_deployment.git /opt/

下一步是配置服務所需的環(huán)境變量。運行這些命令:

export GITHUB_SECRET=asecretpassphraseusebygithubwebhook
export REPO_PATH=/opt/github_hook_deployment/

這篇教程使用網絡鉤子服務的GitHub倉庫,但你可以使用你想要的不同倉庫。最后,使用這些命令開啟該web服務:

cd /opt/github_hook_deployment/
gunicorn --bind 0.0.0.0 wsgi:application --reload

這些選項中綁定了web服務的IP地址為0.0.0.0,意味著它將接收來自任何的主機的請求。選項--reload確保了當代碼更改時重啟web服務。這就是持續(xù)部署的魔力所在。每次接收到GitHub請求時將拉取倉庫的最近更新,同時gunicore檢測這些更改并且自動重啟服務。

*注意:*為了能接收到GitHub請求,web服務必須部署到具有公有IP地址的服務器上。做到這點的簡單方法就是使用你最喜歡的云提供商比如DigitalOcean,AWS,Linode等。

配置GitHub

這篇教程的最后一部分是配置GitHub來發(fā)送網絡鉤子請求到web服務上。這是持續(xù)部署的關鍵。

從你的GitHub倉庫的設置中,選擇Webhook菜單,并且點擊“AddWebhook”。輸入以下信息:

“PayloadURL”:服務的URL,比如<http://public_ip_address:8000/github>

“Contenttype”:選擇“application/json”

“Secret”:前面定義的GITHUB_SECRET環(huán)境變量

然后點擊“AddWebhook”按鈕。



以上就是關于千鋒扣丁學堂Python培訓之如何使用GitHub實現(xiàn)持續(xù)部署方法的全部內容,希望對大家的學習有所幫助,最后想要了解更多關于Python和人工智能方面內容的小伙伴,請關注扣丁學堂Python培訓官網、微信等平臺,扣丁學堂IT職業(yè)在線學習教育平臺為您提供權威的Python開發(fā)環(huán)境搭建視頻,Python培訓后的前景無限,行業(yè)薪資和未來的發(fā)展會越來越好的,扣丁學堂老師精心推出的Python視頻教程定能讓你快速掌握Python從入門到精通開發(fā)實戰(zhàn)技能??鄱W堂Python技術交流群:279521237。


扣丁學堂微信公眾號                          Python全棧開發(fā)爬蟲人工智能機器學習數據分析免費公開課直播間


      【關注微信公眾號獲取更多學習資料】         【掃碼進入Python全棧開發(fā)免費公開課】



查看更多關于"Python開發(fā)資訊"的相關文章>

標簽: Python培訓 Python視頻教程 Python在線視頻 Python學習視頻 Python培訓班

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部