用于获取新代码的 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
配置选项现在接受一个函数。
签名如下
{
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 存储库。支持微信回调。
微信回调与其他提供商有几个不同之处
当您使用微信初始化 webhook 时,您需要提供一个新属性。因为这是一个两步过程。一旦您的服务器与微信服务器验证。他们只会将数据推送到 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
属性,则在执行回调时将仅提供两个参数。
{
cmd : ( result , opt ) => {
// there is no ref
}
}
物业名称 | 描述 | 默认 | 类型 |
---|---|---|---|
目录 | git根目录所在的位置,默认为调用的位置 | process.cwd() | 细绳 |
秘密 | 用于加密 github 和服务器之间数据的密钥传递 | ” | 细绳 |
小路 | Web hook 调用您的服务器的路径 | /webhook | 细绳 |
港口 | 该回调服务器运行的端口号 | 8081 | 整数 |
分支 | 当从 github 收到事件时,您将触发操作的分支。可以通过* 通配符来监听所有分支 | refs/heads/master | 细绳 |
指令 | 回调发生时执行的命令。您还可以将其作为函数传递(请参阅上面的签名),当您使用* 表示分支时特别有用 | 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
然后你只会看到主界面(顶部界面)和微信内部调试消息。
您可以全局安装此工具。
$ 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,了解有关如何设置应用程序的更多信息。
麻省理工学院 © NEWBRAN.CH
由generator-nodex 提供动力。