เซิร์ฟเวอร์โทรกลับ webhook 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
ส่งคืน server
จาก http.createServer
จริง ๆ ดังนั้นคุณจึงสามารถทำให้มันหยุด รีสตาร์ท ฯลฯ ได้อย่างง่ายดาย
ตอนนี้คุณสามารถส่ง provider
ตัวเลือกการกำหนดค่าใหม่ได้แล้ว:
{
secret : 'your-password-between-you-and-gitee' ,
provider : 'gitee'
}
คุณเพียงแค่ต้องเปลี่ยนผู้ให้บริการเป็น gitlab
:
{
secret : 'your-gitlab-token' ,
provider : 'gitlab'
}
เราได้เพิ่มผู้ให้บริการใหม่ที่นี่ - ไม่ใช่ repo git รองรับการโทรกลับ Wechat
มีความแตกต่างหลายประการระหว่างการโทรกลับ wechat และผู้ให้บริการรายอื่น
มีคุณสมบัติใหม่ที่คุณต้องระบุเมื่อคุณเริ่มต้น webhook ด้วย Wechat เพราะนี่เป็นกระบวนการสองขั้นตอน เมื่อเซิร์ฟเวอร์ของคุณได้รับการยืนยันด้วยเซิร์ฟเวอร์ Wechat แล้ว พวกเขาจะส่งข้อมูลไปที่ 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
}
มีตัวอย่างที่สมบูรณ์ในวิกิเพื่อสาธิตวิธีที่คุณสามารถทำได้โดยอัตโนมัติ พร้อมด้วยโมดูลเพิ่มเติม fs-extra
, nodemon
และ node-config
หากคุณใช้ฟังก์ชันเป็นคุณสมบัติ cmd
ของคุณ จะมีการจัดหาพารามิเตอร์เพียงสองตัวเท่านั้น เมื่อดำเนินการโทรกลับของคุณ
{
cmd : ( result , opt ) => {
// there is no ref
}
}
ชื่อคุณสมบัติ | คำอธิบาย | ค่าเริ่มต้น | พิมพ์ |
---|---|---|---|
ผบ | ตำแหน่งไดเร็กทอรีรูท git อยู่ที่ใด ให้ใช้ค่าเริ่มต้นเป็นตำแหน่งที่รับสาย | process.cwd() | สตริง |
ความลับ | รหัสผ่านลับเพื่อเข้ารหัสข้อมูลระหว่าง GitHub และเซิร์ฟเวอร์ของคุณ | - | สตริง |
เส้นทาง | เส้นทางที่เว็บฮุกเรียกไปยังเซิร์ฟเวอร์ของคุณ | /webhook | สตริง |
ท่าเรือ | หมายเลขพอร์ตที่เซิร์ฟเวอร์การติดต่อกลับนี้ทำงานอยู่ | 8081 | จำนวนเต็ม |
สาขา | สาขาที่คุณจะทริกเกอร์การดำเนินการเมื่อได้รับเหตุการณ์จาก GitHub สามารถส่ง * wildcard เพื่อฟังได้ทุกสาขา | 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
จากนั้นคุณจะเห็นเฉพาะข้อความหลัก (อินเทอร์เฟซด้านบน) และข้อความแก้ไขข้อบกพร่องภายใน 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 ของเราสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตั้งค่าแอปของคุณ
เอ็มไอที © NEWBRAN.CH
ขับเคลื่อนด้วยเครื่องกำเนิดไฟฟ้า-nodex