要解决的问题

开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作。

我的应用场景:

使用jira作为管理工具,在jira中创建自定义的工作流来规定测试,上线,发布等流程,并通过自动化工具完成这一系列的操作。



jira issue数据格式地址: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上面的任务id
git_branch = req.body.issue.fields.customfield_10107//jira上面的自定义字段,存的是git 分支名称
, env = req.body.issue.fields.status.name;//当前要构建的的环境名称
//一些检查
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值,没有这玩意接口就不能调用
var data = await ApiClient.Get<any>(jenkinsBaseUrl, 'crumbIssuer/api/json', undefined, { headers: { 'Authorization': jenkinsAuthHeader } }); //组装接口调用要用到的参数
var headers: any = {
'Authorization': jenkinsAuthHeader,
'Content-Type': 'application/x-www-form-urlencoded'
};
headers[data.crumbRequestField] = data.crumb;
//parameter:jenkins job 构建时要传递的参数
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)}`)
//调用jenkins接口,开始构建
await ApiClient.Post(jenkinsBaseUrl, `job/${comment_name}/build`, { json: JSON.stringify(postData) }, { headers: headers });
}
}

虽然jenkins和jira都有互相调用和触发的插件,但是很难完美的满足自身的业务,

比如要根据不同的env(构建环境)调用不同的jenkins来触发不同的构建脚本,毕竟测试环境,产线环境的脚本不太一样。

所以还不如自己做一个小站点来中转来得快,devops运维懂代码开发,是多么强悍呀!

顺带还能做个页面看看进度什么的。

jira webhook 事件触发并程序代码调用jenkins接口触发构建操作的更多相关文章

  1. 存储过程系列之存储过程sql数据库调用和程序代码调用

    1.存储过程,无参数的存储过程 创建无参数存储存储过程 Create Procedure DCEMREMR_TEMPLATEAs SELECT TOP 10 [FILENAME],[FILETITLE ...

  2. android应用程序如何调用支付宝接口

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  3. android应用程序如何调用支付宝接口(转)

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  4. Android 开发之Android 应用程序如何调用支付宝接口

    1.到支付宝官网,下载支付宝集成开发包 由于android设备一般用的都是无线支付,所以我们申请的就是支付宝无线快捷支付接口.下面是申请的地址以及下载接口开发包的网址:https://b.alipay ...

  5. Android之应用程序怎样调用支付宝接口

    http://blog.csdn.net/lilidejing/article/details/19483717 近期在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口.由于用的人比 ...

  6. Java调用Jenkins接口实现远程发版

    主要有以下几个要点: 1.在 Manage Jenkins 中设置Configure Global Security(主要是设置CSRF Protection中的prevent cross site ...

  7. java代码调用第三方接口

    一.利用httpclient来字符串参数(url是第三方接口,不带参数,如:http://192.168.16.200:8081/faceInfo/list,param是url后面所要带的参数) pu ...

  8. C#使用windows服务定时调用api接口

    使用VS创建windows服务项目: 创建好项目  会出现一个设计界面 右键弹出对话框 选择添加安装程序 名字什么的自己可以改: 项目目录: 打开项目中的ProjectInstaller.Design ...

  9. Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php )

    Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php ) 1.1. 这些流氓软件使用操作系统os提供的普通api根本就杀不掉啊1 1.2. 使用 ...

随机推荐

  1. 免安装PostgreSQL启动服务及创建数据库

    安装环境windows7 64位系统 免安装版本postgresql-10.3-1-windows-x64-binaries ===================================== ...

  2. 【MySQL运维实践】

    什么是日志 日志(log)是一种顺序记录事件流水的文件 记录计算机程序运行过程中发生了什么 多种多样的用途  帮助分析程序问题 分析服务请求的特征.流量等 判断工作是否成功执行 等等…… MySQL日 ...

  3. Software Development Engineer, RDS Database Engines, Seattle

    DESCRIPTION About UsAmazon Aurora is an exciting new area of innovation for AWS, and the PostgreSQL- ...

  4. SDN2017 第四次作业

    1.阅读 了解SDN控制器的发展 http://www.sdnlab.com/13306.html http://www.docin.com/p-1536626509.html 了解ryu控制器 ht ...

  5. LeetCode 休闲计划

    老年退役选手的 LeetCode 休闲之旅 前言 不知不觉两年多的大学时光悄然流逝,浑浑噩噩的状态似乎从来没有离开过自己. 这两年刷题似乎一直是常态.在退役之后的现在,深感有些东西一段时间没有接触,很 ...

  6. Java数组、集合的三种遍历方式(包懂)

    1 for循环 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+" "); } 2 foreach循环,这种 ...

  7. C#实现的协同过滤算法

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace SlopeOn ...

  8. 微信发红包 PHP 实现

    最近做生日营销,需要微信发红包,特此从网上找了一篇教程 首先你的有个服务号,并且开通了微信支付,我在这就不说怎么去申请和开通了,我是看了微信官方文档后,想看官方文档的朋友可以到下面这个链接 https ...

  9. 20165302 程上杰 Exp1 PC平台逆向破解

    实验内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的she ...

  10. jenkins不能取到svn最新版本问题的解决

    jenkins总是不能取到最新的SVN版本: 网上有说修改系统时间来解决的,尝试后发现无效: 在源地址末尾添加@HEAD可以解决这个问题.