用於取得新程式碼的 Git (github/gitee) webhook 回呼伺服器 (poor man CI)
這個小工具是從真實專案中誕生的。繼續部署和設定示範網站等。你只需要一個來自 github 的新證書,將其添加到你的項目中,並進行相應的設置,然後 Viola,你就得到了自己的窮人 CI :)
$ npm install --save git-webhook-ci
或者
$ yarn add git-webhook-ci
建立一個 js 檔案(通常位於專案根目錄下)。我們稱之為webhook.js
。
const gitWebhook = require ( 'git-webhook-ci' ) ;
const config = {
"secret" : "your-github-webhook-secret" ,
"path" : "/webhook" ,
"port" : 8081 ,
"branch" : "refs/heads/master" , // New in 0.4.1 you can pass * wildcard to listen to all branches
"cmd" : "git pull origin master --no-edit"
} ;
/*
*/
gitWebhook ( config ) ;
最小設定可以是這樣的:
// Default is github
gitWebhook ( { secret : "your-github-webhook-secret" } ) ;
// For Gitee
gitWebhook ( { secret : 'your-gitee-password' , provider : 'gitee' } ) ;
// For Gitlab
gitWebhook ( { secret : 'your-gitlab-token' , provider : 'gitlab' } ) ;
cmd
配置選項現在接受一個函數。
簽名如下
{
secret : 'your-secret-between-you-and-github' ,
cmd : ( result , opt , ref ) => {
// result has 3 properties
// 1. payload
// 2. host
// 3. event - from github / gitee
// opt is an environment variable that you can pass to the spawn
}
}
如何組合通配符分支選項和函數回調的範例
const gitWebhook = require ( 'git-webook-ci' ) ;
const { spawn } = require ( 'child_process' ) ;
const server = gitWebhook ( {
secret : 'your-secret-between-you-and-github' ,
branch : '*' ,
cmd : ( result , opt , ref ) => {
switch ( ref ) {
case 'refs/heads/master' :
const e1 = spawn ( 'npm' , [ 'run' , 'something' ] , opt ) ;
break ;
case 'refs/heads/develop' :
const e2 = spawn ( 'npm' , [ 'run' , 'something-else' ] , opt ) ;
break ;
default :
// do special stuff using the result object
specialFunc ( result . payload , opt ) ;
}
}
} ) ;
正如您從上面的程式碼範例中看到的。方法gitWebhook
實際上從http.createServer
傳回server
實例。所以你可以輕鬆地讓它停止、重新啟動等。
現在您可以傳遞一個新的配置選項provider
:
{
secret : 'your-password-between-you-and-gitee' ,
provider : 'gitee'
}
您只需將提供者變更為gitlab
:
{
secret : 'your-gitlab-token' ,
provider : 'gitlab'
}
我們在這裡新增了一個新的提供者 - 它不是 git 儲存庫。支援微信回調。
微信回呼與其他提供者有幾個不同之處
當您使用微信初始化 webhook 時,您需要提供一個新屬性。因為這是一個兩步驟過程。一旦您的伺服器與微信伺服器驗證。他們只會將資料推送到 URL。所以你需要像這樣運行一次。
首先,您需要使用inited:false
(預設)來運行
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : false // this is default
}
然後重新配置您的 webhook 以運行正常操作:
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : true // default: false
}
wiki 中有一個完整的範例,示範如何使用附加模組fs-extra
、 nodemon
和node-config
自動執行此操作。
如果您使用函數作為cmd
屬性,則在執行回呼時將僅提供兩個參數。
{
cmd : ( result , opt ) => {
// there is no ref
}
}
物業名稱 | 描述 | 預設 | 類型 |
---|---|---|---|
目錄 | git根目錄所在的位置,預設為呼叫的位置 | process.cwd() | 細繩 |
秘密 | 用於加密 github 和伺服器之間資料的金鑰傳遞 | 」 | 細繩 |
小路 | Web hook 呼叫您的伺服器的路徑 | /webhook | 細繩 |
港口 | 此回調伺服器運行的連接埠號 | 8081 | 整數 |
分支 | 當從 github 收到事件時,您將觸發操作的分支。可以透過* 通配符來監聽所有分支 | refs/heads/master | 細繩 |
指令 | 回調發生時執行的命令。您也可以將其作為函數傳遞(請參閱上面的簽名),當您使用* 表示分支時特別有用 | git pull origin master --no-edit | 細繩 |
發起的 | 僅適用於wechat 提供者 | false | 布林值 |
在內部我們使用debug
來追蹤正在發生的事情。因此,您可以在腳本啟動期間傳遞 env 來偵錯您的設定。
DEBUG= * node ./webhook.js
如果您這樣做,您將看到大量資訊。我們所有的調試標誌都以git-webhook-ci
為前綴,以下是我們在此 npm 中使用的所有鍵的列表。
例如:
DEBUG=git-webhook-ci:main,git-webhook-ci:wechat node ./webhook.js
然後你只會看到主介面(頂部介面)和微信內部偵錯訊息。
您可以全域安裝此工具。
$ npm install git-webhook-ci --global
然後你可以像這樣從命令列呼叫它
$ git-webhook-ci /path/to/your/git --secret secret-you-setup
或是在你的package.json
中
{
"scripts" : {
"webhook" : "git-webhook-ci ./ --secret secret-you-setup"
}
}
然後只需使用npm run webhook
運行它
請查看我們的 Wiki,以了解有關如何設定應用程式的更多資訊。
麻省理工學院 © NEWBRAN.CH
由generator-nodex 提供動力。