Un serveur de rappel webhook Git (github/gitee) pour récupérer du nouveau code (pauvre homme CI)
Ce petit outil est né de projets réels. Continuez à devoir déployer et configurer un site de démonstration, etc. Pourquoi s'embêter si vous possédez le compte git ? Vous avez juste besoin d'un nouveau certificat de github, ajoutez-le à votre projet et configurez-le en conséquence, et Viola, vous obtenez votre propre pauvre CI :)
$ npm install --save git-webhook-ci
ou
$ yarn add git-webhook-ci
Créez un fichier js (normalement dans le répertoire racine de votre projet). Appelons- 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 ) ;
La configuration minimale peut être la suivante :
// 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' } ) ;
L'option de configuration cmd
accepte désormais une fonction.
La signature comme suit
{
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
}
}
Exemple comment combiner l'option de branche générique et un rappel de fonction
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 ) ;
}
}
} ) ;
Comme vous pouvez le voir dans l’exemple de code ci-dessus. La méthode gitWebhook
renvoie en fait l'instance server
depuis http.createServer
. Vous pouvez donc l'arrêter, le redémarrer, etc. facilement.
Vous pouvez maintenant passer un nouveau provider
d'options de configuration :
{
secret : 'your-password-between-you-and-gitee' ,
provider : 'gitee'
}
Il vous suffit de changer de fournisseur en gitlab
:
{
secret : 'your-gitlab-token' ,
provider : 'gitlab'
}
Nous avons ajouté un nouveau fournisseur ici - ce n'est pas un dépôt git. Il prend en charge le rappel Wechat.
Il existe plusieurs différences entre le rappel WeChat et les autres fournisseurs
Il y a une nouvelle propriété que vous devez fournir lorsque vous lancez votre webhook avec Wechat. Parce qu'il s'agit d'un processus en deux étapes. Une fois votre serveur vérifié avec le serveur Wechat. Ils transmettront simplement les données vers l'URL. Vous devez donc l'exécuter une fois comme ça.
Vous devez d’abord exécuter avec inited:false
(par défaut)
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : false // this is default
}
Reconfigurez ensuite votre webhook pour qu'il fonctionne normalement :
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : true // default: false
}
Il existe un exemple complet dans le wiki pour montrer comment vous pouvez le faire automatiquement, avec les modules supplémentaires fs-extra
, nodemon
et node-config
.
Si vous utilisez function comme propriété cmd
, seuls deux paramètres seront fournis lors de l'exécution de votre rappel.
{
cmd : ( result , opt ) => {
// there is no ref
}
}
Nom de la propriété | Description | Défaut | Taper |
---|---|---|---|
dir | Où se trouve le répertoire racine git, par défaut là où il est appelé | process.cwd() | Chaîne |
secrète | Un passe de clé secrète pour crypter les données entre github et votre serveur | '' | Chaîne |
chemin | Le chemin par lequel le webhook appelle votre serveur | /webhook | Chaîne |
port | Le numéro de port sur lequel ce serveur de rappel s'exécute | 8081 | Entier |
bifurquer | La branche où vous déclencherez l'action lors de la réception d'un événement de github. Vous pouvez passer le joker * pour écouter toutes les branches | refs/heads/master | Chaîne |
cmd | La commande à exécuter lorsque le rappel se produit. Vous pouvez également le transmettre sous forme de fonction (voir ci-dessus pour la signature) et particulièrement utile lorsque vous utilisez * pour la branche | git pull origin master --no-edit | Chaîne |
initié | disponible uniquement avec le fournisseur wechat | false | Booléen |
En interne, nous utilisons debug
pour suivre ce qui se passe. Vous pouvez donc simplement transmettre l'environnement lors du démarrage du script pour déboguer votre configuration.
DEBUG= * node ./webhook.js
Si vous faites cela, vous verrez une énorme quantité d’informations. Tous nos indicateurs de débogage sont préfixés par git-webhook-ci
, et voici la liste de toutes les clés que nous utilisons dans ce npm.
Par exemple:
DEBUG=git-webhook-ci:main,git-webhook-ci:wechat node ./webhook.js
Ensuite, vous ne verrez que les messages principaux (interface supérieure) et les messages de débogage internes de Wechat.
Vous pouvez installer ces outils dans le monde entier.
$ npm install git-webhook-ci --global
Ensuite, vous pouvez l'appeler depuis la ligne de commande comme ceci
$ git-webhook-ci /path/to/your/git --secret secret-you-setup
Ou dans votre package.json
{
"scripts" : {
"webhook" : "git-webhook-ci ./ --secret secret-you-setup"
}
}
Ensuite, exécutez-le simplement avec npm run webhook
Consultez notre Wiki pour plus d'informations sur la configuration de votre application.
MIT © NEWBRAN.CH
Alimentation par générateur-nodex.