Um servidor de retorno de chamada webhook Git (github/gitee) para buscar novo código (pobre homem CI)
Esta pequena ferramenta nasce de projetos reais. Continue tendo que implantar e configurar o site de demonstração, etc. Por que se preocupar se você possui a conta git? Você só precisa de um novo certificado do github, adicioná-lo ao seu projeto e configurá-lo de acordo, e Viola, você obtém seu próprio pobre CI :)
$ npm install --save git-webhook-ci
ou
$ yarn add git-webhook-ci
Crie um arquivo js (normalmente no diretório raiz do seu projeto). Vamos chamá-lo de 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 ) ;
A configuração mínima pode ser assim:
// 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' } ) ;
A opção de configuração cmd
agora aceita uma função.
A assinatura como segue
{
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
}
}
Exemplo de como combinar a opção de ramificação curinga e um retorno de chamada de função
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 ) ;
}
}
} ) ;
Como você pode ver no exemplo de código acima. O método gitWebhook
realmente retorna a instância server
de http.createServer
. Assim, você pode parar, reiniciar, etc. facilmente.
Agora você pode passar um novo provider
de opções de configuração:
{
secret : 'your-password-between-you-and-gitee' ,
provider : 'gitee'
}
Você só precisa mudar o provedor para gitlab
:
{
secret : 'your-gitlab-token' ,
provider : 'gitlab'
}
Adicionamos um novo provedor aqui – não é um repositório git. Ele suporta o retorno de chamada do Wechat.
Existem várias diferenças entre o retorno de chamada do wechat e os outros provedores
Há uma nova propriedade que você precisa fornecer ao iniciar seu webhook com o Wechat. Porque este é um processo de duas etapas. Assim que seu servidor for verificado com o servidor Wechat. Eles apenas enviarão os dados para o URL. Então você precisa executar isso uma vez assim.
Primeiro você precisa executar com o inited:false
(padrão)
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : false // this is default
}
Em seguida, reconfigure seu webhook para executar a operação normal:
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : true // default: false
}
Há um exemplo completo no wiki para demonstrar como você pode fazer isso automaticamente, com módulos adicionais fs-extra
, nodemon
e node-config
.
Se você estiver usando function como sua propriedade cmd
, haverá apenas dois parâmetros fornecidos, quando executar seu retorno de chamada.
{
cmd : ( result , opt ) => {
// there is no ref
}
}
Nome da propriedade | Descrição | Padrão | Tipo |
---|---|---|---|
diretório | Onde está o diretório raiz do git, o padrão é onde ele recebe a chamada | process.cwd() | Corda |
segredo | Uma chave secreta para criptografar dados entre o github e seu servidor | '' | Corda |
caminho | O caminho onde o web hook chama seu servidor | /webhook | Corda |
porta | O número da porta onde este servidor de retorno de chamada está sendo executado | 8081 | Inteiro |
filial | O branch onde você acionará a ação quando receber um evento do github. Você pode passar * curinga para ouvir todas as ramificações | refs/heads/master | Corda |
cmd | O comando a ser executado quando o retorno de chamada acontecer. Você também pode passar isso como uma função (veja a assinatura acima) e é especialmente útil quando você usa * para branch | git pull origin master --no-edit | Corda |
iniciado | disponível apenas com provedor wechat | false | Booleano |
Internamente usamos debug
para rastrear o que está acontecendo. Portanto, você pode simplesmente passar o env durante a inicialização do script para depurar sua configuração.
DEBUG= * node ./webhook.js
Se você fizer isso, verá uma grande quantidade de informações. Todos os nossos sinalizadores de depuração são prefixados com git-webhook-ci
e aqui está a lista de todas as chaves que usamos neste npm.
Por exemplo:
DEBUG=git-webhook-ci:main,git-webhook-ci:wechat node ./webhook.js
Então você verá apenas as mensagens de depuração principal (interface superior) e interna do Wechat.
Você pode instalar essas ferramentas globalmente.
$ npm install git-webhook-ci --global
Então você pode chamá-lo da linha de comando assim
$ git-webhook-ci /path/to/your/git --secret secret-you-setup
Ou no seu package.json
{
"scripts" : {
"webhook" : "git-webhook-ci ./ --secret secret-you-setup"
}
}
Em seguida, basta executá-lo com npm run webhook
Verifique nosso Wiki para obter mais informações sobre como configurar seu aplicativo.
MIT © NEWBRAN.CH
Energia por gerador-nodex.