新しいコードを取得するための Git (github/gitee) webhook コールバック サーバー (poor man CI)
この小さなツールは実際のプロジェクトから生まれました。デモ サイトなどをデプロイしてセットアップする必要があり続けます。git アカウントを所有しているのに、なぜわざわざ面倒な作業をする必要があるでしょうか。必要なのは、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
config オプションが関数を受け入れるようになりました。
署名は以下の通り
{
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 リポジトリではありません。 Wechat コールバックをサポートします。
wechat コールバックと他のプロバイダーの間にはいくつかの違いがあります
Wechat で Webhook を開始するときに指定する必要がある新しいプロパティがあります。これは 2 段階のプロセスであるためです。サーバーが Wechat サーバーで認証されたら、データを 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
プロパティとして function を使用している場合、コールバックを実行するときに指定できるパラメーターは 2 つだけです。
{
cmd : ( result , opt ) => {
// there is no ref
}
}
プロパティ名 | 説明 | デフォルト | タイプ |
---|---|---|---|
ディレクトリ | git ルート ディレクトリの場所。デフォルトでは呼び出しを取得する場所になります。 | process.cwd() | 弦 |
秘密 | Github とサーバー間のデータを暗号化するための秘密キー パス | 」 | 弦 |
パス | Web フックがサーバーを呼び出すパス | /webhook | 弦 |
ポート | このコールバック サーバーが実行されているポート番号 | 8081 | 整数 |
支店 | Github からイベントを受信したときにアクションをトリガーするブランチ。 * ワイルドカードを渡すと、すべてのブランチをリッスンできます | refs/heads/master | 弦 |
cmd | コールバックが発生したときに実行するコマンド。これを関数として渡すこともできます (署名については上記を参照)。ブランチに* 使用する場合に特に便利です | 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
その後、メイン (トップインターフェイス) と Wechat の内部デバッグ メッセージのみが表示されます。
このツールはグローバルにインストールできます。
$ 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 を確認してください。
MIT © NEWBRAN.CH
ジェネレーターノードによる電力供給。