새 코드를 가져오기 위한 Git(github/gitee) 웹후크 콜백 서버(불량한 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 repo가 아닙니다. Wechat 콜백을 지원합니다.
wechat 콜백과 다른 제공업체 간에는 몇 가지 차이점이 있습니다.
Wechat으로 웹훅을 초기화할 때 제공해야 하는 새로운 속성이 있습니다. 이는 2단계 프로세스이기 때문입니다. 귀하의 서버가 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
발전기-노덱스로 전력을 공급합니다.