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

目录
相关文章
|
4月前
|
jenkins 持续交付
Jenkins Pipeline 参数化构建
Jenkins Pipeline 参数化构建
84 0
|
4月前
|
存储 jenkins 持续交付
Jenkins 构建环境指南
Delete workspace before build starts(常用) 在每次构建开始前清空工作空间。这确保了每次构建开始时都是在一个干净的环境下进行,避免了旧的文件或数据对新构建的影响。特别是对于需要频繁构建的项目,保持工作空间的干净能够确保构建过程的可靠性。 Use secret text(s) or file(s) (常用) 允许你在构建过程中使用加密的文本或文件作为凭证。这对于需要访问受保护资源的构建任务非常有用,可以安全地存储和使用密码、API 密钥等敏感信息,而不用担心泄漏。
124 2
|
23天前
|
jenkins 持续交付
Jenkins构建简单流水线
Jenkins构建简单流水线
11 0
|
4月前
|
jenkins Java Shell
一文搞定Jenkins自动化部署程序
一文搞定Jenkins自动化部署程序
59 0
|
4月前
|
安全 jenkins 持续交付
Jenkins 构建触发器指南
描述 这个触发器允许你通过发送HTTP请求远程触发Jenkins Job的构建。通常用于将Jenkins集成到自动化流程中,例如在持续集成/持续交付(CI/CD)中。 配置步骤 进入Jenkins Job的配置页面,找到 "构建触发器" 部分。 勾选 "触发远程构建 (例如,使用脚本) / Trigger builds remotely (e.g., from scripts)"。 安全令牌 提供一个安全令牌(Token),确保只有知道令牌的请求才能触发构建。 比如:JENKINS_URL/job/freedom/build?token=TOKEN_NAME JENKINS_URL: 这是你J
194 1
|
4月前
|
JSON jenkins 持续交付
jenkins-Generic Webhook Trigger指定分支构建
jenkins-Generic Webhook Trigger指定分支构建
62 0
|
4月前
|
jenkins 持续交付 数据安全/隐私保护
push请求触发Jenkins中的构建
push请求触发Jenkins中的构建
|
4月前
|
JavaScript jenkins 持续交付
Jenkins自动化构建Vue项目的实践
在现代的Web开发中,Vue.js已经成为一种非常流行的JavaScript框架。为了更高效地管理和部署Vue.js项目,使用自动化构建工具是至关重要的。Jenkins作为一款强大的持续集成和持续部署(CI/CD)工具,为我们提供了一种便捷的方式来自动化构建Vue.js项目。本文将介绍如何在Jenkins中配置和使用自动化构建Vue.js项目的步骤。
91 1
Jenkins自动化构建Vue项目的实践
|
4月前
|
存储 jenkins 持续交付
git文件过大导致构建失败的解决方案(快速提升jenkins构建速度)
git文件过大导致构建失败的解决方案(快速提升jenkins构建速度)
67 0
|
5月前
|
Java jenkins 持续交付
jenkins构建jar包为镜像并上传到docker仓库
jenkins构建jar包为镜像并上传到docker仓库
124 0