Сервер обратного вызова веб-перехватчика Git (github/gitee) для получения нового кода (бедняга CI)
Этот маленький инструмент родился из реальных проектов. Продолжайте развертывать и настраивать демонстрационный сайт и т. д. Зачем беспокоиться, если у вас есть учетная запись git? Вам просто нужен новый сертификат с GitHub, добавьте его в свой проект и настройте соответствующим образом, и Виола, вы получите свой собственный бедный 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
фактически возвращает экземпляр server
из http.createServer
. Таким образом, вы можете легко остановить, перезапустить и т. д.
Теперь вы можете передать новый provider
параметров конфигурации:
{
secret : 'your-password-between-you-and-gitee' ,
provider : 'gitee'
}
Вам просто нужно сменить провайдера на gitlab
:
{
secret : 'your-gitlab-token' ,
provider : 'gitlab'
}
Мы добавили сюда нового провайдера — это не репозиторий git. Он поддерживает обратный вызов Wechat.
Между обратным вызовом WeChat и другими провайдерами есть несколько различий.
Существует новое свойство, которое вам необходимо указать при инициализации веб-перехватчика с помощью Wechat. Потому что это двухэтапный процесс. Как только ваш сервер будет проверен на сервере Wechat. Они просто передадут данные на URL-адрес. Итак, вам нужно запустить это один раз вот так.
Сначала вам нужно запустить с inited:false
(по умолчанию)
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : false // this is default
}
Затем повторно настройте вебхук для нормальной работы:
{
secret : 'the-token-you-setup-with-wechat' ,
provider : 'wechat' ,
inited : true // default: false
}
В вики есть полный пример, демонстрирующий, как вы можете сделать это автоматически, с дополнительными модулями fs-extra
, nodemon
и node-config
.
Если вы используете функцию в качестве свойства cmd
, при выполнении обратного вызова будет предоставлено только два параметра.
{
cmd : ( result , opt ) => {
// there is no ref
}
}
Имя свойства | Описание | По умолчанию | Тип |
---|---|---|---|
реж. | Где находится корневой каталог git, по умолчанию он находится там, где он вызывается | process.cwd() | Нить |
секрет | Секретный ключ для шифрования данных между github и вашим сервером. | '' | Нить |
путь | Путь, по которому веб-перехватчик обращается к вашему серверу. | /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
Питание от генератора-узла.