jira webhook 事件触发并程序代码调用jenkins接口触发构建操作
要解決的問題
開發(fā)管理工具觸發(fā)站點構建事件,事件處理中需要調(diào)用Jenkins接口開始構建動作。
我的應用場景:
使用jira作為管理工具,在jira中創(chuàng)建自定義的工作流來規(guī)定測試,上線,發(fā)布等流程,并通過自動化工具完成這一系列的操作。
jira issue數(shù)據(jù)格式地址:https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getIssue
jenkins接口參考地址:https://wiki.jenkins.io/display/JENKINS/Remote+access+API
jira 的webhook
webhook server端代碼(nodejs+typescript)
主要的代碼如下所示,所以看代碼和注釋都不需要多解釋。
export class JenkinsController extends BaseController {public async jira_notify_jenkins_build() {const jenkinsAuthHeader = `Basic ${base64(jenkins_username + ':' + jenkins_userpwd)}`;var jenkinsBaseUrl = 'http://ip:8080/';//jenkins的地址var comment_name = req.body.issue.fields.components[0].name,//站點名稱jira_issue_id = req.body.issue.key,//jira上面的任務idgit_branch = req.body.issue.fields.customfield_10107//jira上面的自定義字段,存的是git 分支名稱, env = req.body.issue.fields.status.name;//當前要構建的的環(huán)境名稱//一些檢查if (!req.body.changelog || !req.body.changelog.items || !req.body.changelog.items[0] || req.body.changelog.items[0].field !== 'status') {log.Info(`${comment_name} changelog not status ${JSON.stringify(req.body && req.body.changelog)}`)res.end();return;}if (env !== 'SIT' && env !== 'UAT' && env !== 'STG' && env !== 'PROD') {log.Info(`${comment_name} env not support.${env}`)res.end();return;}//獲得jenkins的crumb值,沒有這玩意接口就不能調(diào)用var data = await ApiClient.Get<any>(jenkinsBaseUrl, 'crumbIssuer/api/json', undefined, { headers: { 'Authorization': jenkinsAuthHeader } });//組裝接口調(diào)用要用到的參數(shù)var headers: any = {'Authorization': jenkinsAuthHeader,'Content-Type': 'application/x-www-form-urlencoded'};headers[data.crumbRequestField] = data.crumb;//parameter:jenkins job 構建時要傳遞的參數(shù)var postData = {parameter: [{"name": "selected_branch","value": git_branch},{"name": "env","value": env},{"name": "JIRA_ISSUE_ID","value": jira_issue_id}]};log.Info(`${comment_name} notify jenkins building. ${JSON.stringify(postData)}`)//調(diào)用jenkins接口,開始構建await ApiClient.Post(jenkinsBaseUrl, `job/${comment_name}/build`, { json: JSON.stringify(postData) }, { headers: headers });} }雖然jenkins和jira都有互相調(diào)用和觸發(fā)的插件,但是很難完美的滿足自身的業(yè)務,
比如要根據(jù)不同的env(構建環(huán)境)調(diào)用不同的jenkins來觸發(fā)不同的構建腳本,畢竟測試環(huán)境,產(chǎn)線環(huán)境的腳本不太一樣。
所以還不如自己做一個小站點來中轉來得快,devops運維懂代碼開發(fā),是多么強悍呀!
順帶還能做個頁面看看進度什么的。
轉載于:https://www.cnblogs.com/calvinK/p/9084518.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的jira webhook 事件触发并程序代码调用jenkins接口触发构建操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF整理-使用逻辑资源
- 下一篇: Mysql主从常见问题