Ein Git-Webhook-Callback-Server (Github/Gitee) zum Abrufen von neuem Code (Poor Man CI)
Dieses kleine Tool ist aus echten Projekten entstanden. Sie müssen weiterhin eine Demo-Site usw. bereitstellen und einrichten. Warum sollten Sie sich die Mühe machen, wenn Sie über das Git-Konto verfügen? Sie brauchen nur ein neues Zertifikat von Github, fügen es Ihrem Projekt hinzu und richten es entsprechend ein, und Viola, Sie bekommen Ihr eigenes Arme-Mann-CI :)
$ npm install --save git-webhook-ci
oder
$ yarn add git-webhook-ci
Erstellen Sie eine js-Datei (normalerweise im Stammverzeichnis Ihres Projekts). Nennen wir es 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 ) ;
Die Mindestkonfiguration kann wie folgt aussehen:
// 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' } ) ;
Die cmd
Konfigurationsoption akzeptiert jetzt eine Funktion.
Die Signatur wie folgt
{
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
}
}
Beispiel für die Kombination der Wildcard-Verzweigungsoption und eines Funktionsrückrufs
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 ) ;
}
}
} ) ;
Wie Sie dem Codebeispiel oben entnehmen können. Die Methode gitWebhook
gibt tatsächlich die server
von http.createServer
zurück. So können Sie es ganz einfach anhalten, neu starten usw.
Sie können jetzt einen neuen provider
übergeben:
{
secret : 'your-password-between-you-and-gitee' ,
provider : 'gitee'
}
Sie müssen lediglich den Anbieter auf gitlab
ändern:
{
secret : 'your-gitlab-token' ,
provider : 'gitlab'
}
Wir haben hier einen neuen Anbieter hinzugefügt – es ist kein Git-Repo. Es unterstützt den Wechat-Rückruf.
Es gibt einige Unterschiede zwischen Wechat Callback und den anderen Anbietern
Es gibt eine neue Eigenschaft, die Sie angeben müssen, wenn Sie Ihren Webhook mit Wechat initiieren. Denn es handelt sich hierbei um einen zweistufigen Prozess. Sobald Ihr Server beim Wechat-Server verifiziert ist. Sie übertragen die Daten einfach an die URL. Sie müssen dies also einmal so ausführen.
Zuerst müssen Sie mit inited:false
(Standard) ausführen.
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : false // this is default
}
Konfigurieren Sie dann Ihren Webhook neu, um den normalen Betrieb auszuführen:
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : true // default: false
}
Im Wiki gibt es ein vollständiges Beispiel, das zeigt, wie Sie dies automatisch tun können, mit den zusätzlichen Modulen fs-extra
, nodemon
und node-config
.
Wenn Sie die Funktion als cmd
Eigenschaft verwenden, werden beim Ausführen Ihres Rückrufs nur zwei Parameter bereitgestellt.
{
cmd : ( result , opt ) => {
// there is no ref
}
}
Eigenschaftsname | Beschreibung | Standard | Typ |
---|---|---|---|
dir | Wo sich das Git-Stammverzeichnis befindet, ist standardmäßig der Ort, an dem es aufgerufen wird | process.cwd() | Zeichenfolge |
Geheimnis | Ein geheimer Schlüssel zur Verschlüsselung von Daten zwischen Github und Ihrem Server | '' | Zeichenfolge |
Weg | Der Pfad, über den der Web-Hook Ihren Server aufruft | /webhook | Zeichenfolge |
Hafen | Die Portnummer, auf der dieser Callback-Server läuft | 8081 | Ganze Zahl |
Zweig | Der Zweig, in dem Sie eine Aktion auslösen, wenn Sie ein Ereignis von Github erhalten. Sie können das Platzhalterzeichen * übergeben, um alle Zweige abzuhören | refs/heads/master | Zeichenfolge |
cmd | Der Befehl, der ausgeführt werden soll, wenn ein Rückruf erfolgt. Sie können dies auch als Funktion übergeben (Signatur siehe oben), was besonders nützlich ist, wenn Sie * für die Verzweigung verwenden | git pull origin master --no-edit | Zeichenfolge |
initiiert | Nur beim wechat -Anbieter verfügbar | false | Boolescher Wert |
Intern verwenden wir debug
um zu verfolgen, was vor sich geht. Sie können die Umgebung also einfach beim Start des Skripts übergeben, um Ihr Setup zu debuggen.
DEBUG= * node ./webhook.js
Wenn Sie das tun, werden Sie eine große Menge an Informationen sehen. Allen unseren Debug-Flags wird git-webhook-ci
vorangestellt, und hier ist die Liste aller Schlüssel, die wir in diesem npm verwenden.
Zum Beispiel:
DEBUG=git-webhook-ci:main,git-webhook-ci:wechat node ./webhook.js
Dann sehen Sie nur die Haupt- (obere Schnittstelle) und die internen Debug-Meldungen von Wechat.
Sie können diese Tools global installieren.
$ npm install git-webhook-ci --global
Dann können Sie es wie folgt über die Befehlszeile aufrufen
$ git-webhook-ci /path/to/your/git --secret secret-you-setup
Oder in Ihrer package.json
{
"scripts" : {
"webhook" : "git-webhook-ci ./ --secret secret-you-setup"
}
}
Dann führen Sie es einfach mit npm run webhook
aus
Weitere Informationen zum Einrichten Ihrer App finden Sie in unserem Wiki.
MIT © NEWBRAN.CH
Leistung durch Generator-Nodex.