git 能在特定的重要動作發生時觸發自定義的指令碼。
這些指令碼都被儲存在 git 目錄下的 hooks 子目錄中(.git/hooks
)。當 git init 初始化乙個倉庫時,git 缺省會在這個目錄中放置一些示例指令碼。這些指令碼一般都是 shell 指令碼。不過自定義的可執行指令碼可以使用你喜歡的指令碼語言,如 ruby、python 等。
這些示例的名字都是以 .sample 結尾,如果需要啟用它們,首先要移除這個字尾:
cd .git/hooks
ls
commit-msg.sample
post-update.sample
pre-commit.sample
pre-push.sample
pre-rebase.sample
prepare-commit-msg.sample
update.sample
鉤子按功能分來兩類:客戶端和和伺服器端的。
客戶端鉤子由諸如提交(commit)和合併(merge)這樣的操作所呼叫,而伺服器端鉤子作用於諸如接收被推送(push)的提交這樣的聯網操作。
顧名思義,web hooks 的含義是將本地指令碼介面化。gitlab 能在特定的重要動作發生時呼叫自定義的介面。介面的內部邏輯實現自動化部署或自動化測試的**。
以 nginx + supervisor 部署 flask 應用作為我們的介面服務。
建立 python 檔案:
vi web_hooks_flask.py
寫入以下**:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from flask import flask, request
import json
import os
def index():
path = '/home/www/test/' # 專案目錄
return _hooks(path, request.data)
def _hooks(path, data):
post_data = json.loads(data)
ref = post_data['ref']
branch_name = ref.split('/')[-1]
status = os.system("cd %s && git checkout %s && git pull --rebase" % (path, branch_name,))
if status == 0:
return 'success'
else:
return 'error'
if __name__ == '__main__':
儲存後,啟動服務:
python web_hooks_flask.py啟動成功:
* running on (press ctrl+c to quit)
* restarting with stat
* debugger is active!
* debugger pin code: 569-323-263
supervisor 是乙個程序管理程式,能將乙個普通的命令列程序變為守護程序,並監控程序狀態,異常退出時能自動重啟。
在 supervisor 的配置檔案中追加:
[program:web_hooks_flask]
command=python /path/web_hooks_flask.py # path 改為具體部署的絕對路徑
redirect_stderr=true
stdout_logfile=/path/web_hooks_flask.log # path 改為具體部署的絕對路徑
更新配置檔案:
supervisorctl update
啟動程序:
supervisorctl start web_hooks_flask
檢視程序:
supervisorctl
web_hooks_flask running pid 29526, uptime 2 days, 20:58:51
向 nginx 配置檔案中追加配置:
server
}
重啟 nginx 服務。
在上圖的url中,填入hooks.test.com
儲存即可。
如何建立乙個模組 如何起步建立乙個童裝品牌?
自從有了童裝創業的想法,腦海中蹦出無數想法。從0到1建立乙個品牌,首先要問清楚自身,理想中這將是乙個怎樣的品牌?展示出來是怎樣的形象?希望消費者對品牌產生怎樣的感受?最終實現品牌的什麼目標?這些問題,並不是一開始就能確定答案,也不會是一成不變。我們應該從建立品牌,到運營 維護品牌,都對這些問題保持思...
如何建立乙個dblink
建立乙個dblink的詳細步驟 1 啟動伺服器資料庫 2 建立乙個本地net服務名 oracle oracle92 configuration and migration tools net configuration assistant 3 登入sqlplus 用本地帳戶登入 4 建立dblink...
如何建立乙個GitLab Web Hooks
git 能在特定的重要動作發生時觸發自定義的指令碼。這些指令碼都被儲存在 git 目錄下的 hooks 子目錄中 git hooks 當 git init 初始化乙個倉庫時,git 缺省會在這個目錄中放置一些示例指令碼。這些指令碼一般都是 shell 指令碼。不過自定義的可執行指令碼可以使用你喜歡的...