jira webhook 事件触发并程序代码调用jenkins接口触发构建操作

简介: 要解决的问题开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作。我的应用场景:使用jira作为管理工具,在jira中创建自定义的工作流来规定测试,上线,发布等流程,并通过自动化工具完成这一系列的操作。

要解决的问题

开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作。
我的应用场景:
使用jira作为管理工具,在jira中创建自定义的工作流来规定测试,上线,发布等流程,并通过自动化工具完成这一系列的操作。
img_2a11896b609ffa38a317cb0c50ec2b75.png
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

img_00d5543f1df7ee9e701e62e3b1286ad1.png

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运维懂代码开发,是多么强悍呀!
顺带还能做个页面看看进度什么的。
img_0f84111768eb2477bb7bcbdf2a888adf.png

目录
相关文章
|
2月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
66 5
|
3月前
|
jenkins Java 持续交付
Gitee+Jenkins+SonarQube代码上线的实战操作
通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
|
3月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
121 3
|
4月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
4月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
66 5
|
4月前
|
jenkins 持续交付 开发工具
【10月更文挑战第1天】通过jenkins选择tag完成代码上线
【10月更文挑战第1天】通过jenkins选择tag完成代码上线
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
125 0
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
324 0
|
5月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
115 0
|
3月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
113 2