要解决的问题

开发管理工具触发站点构建事件,事件处理中需要调用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. 将目录结构输出为json格式(zTree)

    # -*- coding: UTF-8 -*- import json,os path = 'E:\\BACKUP' #返回空目录 def path_to_dict(path): d = {'name ...

  2. linux常见问题解决

    1.登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* .

  3. csrf在web网站中有多重要

    小弟是学python的,今天在上网时看到一个商城网站,正好昨天学到了CSRF跨站请求,就对这个商城网站进行了一波测试 可以看到网页布局做的还是很不错的,然后进入了注册页面看看 之后就开始测试了 正常请 ...

  4. input file 美化

    <input type='file'>的默认外观实在难看,绝大多数情况都需要对其美化.找了很多资料,目前发现以下方式是最简单的美化方式. 1.将file input用label包裹起来,然 ...

  5. Rsyslog配置文件详解(转)

    最近在搭建日志审计服务器,使用了rsyslog,发现这篇文章很有用,收藏一下. 原文链接:http://my.oschina.net/0757/blog/198329 具体内容: 非常详细的rsysl ...

  6. 数据同步canal客户端

    1.增量订阅.消费设计 get/ack/rollback协议介绍: ① Message getWithoutAck(int batchSize),允许指定batchSize,一次可以获取多条,每次返回 ...

  7. canal数据同步目录

    我们公司对于数据同步有以下需求 1.多个mysql库中有一些基础表需要数据统一,mysql跨库同步 2.mysql热数据加载到redis 3.全文检索需要mysql同步到es 4.数据变更是附属的其它 ...

  8. day73

    今日内容:  1基于双下划线的跨表查询   套路一样,用__跨表   -一对多    -多对多 # 北京出版社出版的所有图书 res = models.Publish.objects.filter(n ...

  9. jquery的$(document).ready()与js的window.onload区别

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  10. W25Q128BV W25Q128FV W25Q128JV 什么区别?

    W25Q128BV  W25Q128FV  W25Q128JV  什么区别?    官网没有找到  BV 的相关信息, 倒是有 FV,FW,JV,JW 信息..2019年1月19日19:09:55 F ...