前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >jira webhook 事件触发并程序代码调用jenkins接口触发构建操作

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

作者头像
旺财的城堡
发布于 2018-11-20 08:39:53
发布于 2018-11-20 08:39:53
4K00
代码可运行
举报
文章被收录于专栏:calvincalvin
运行总次数:0
代码可运行

要解决的问题

开发管理工具触发站点构建事件,事件处理中需要调用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)

主要的代码如下所示,所以看代码和注释都不需要多解释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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运维懂代码开发,是多么强悍呀! 顺带还能做个页面看看进度什么的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
当项目需要使用Docker,对Dockerfile、配置加速器以及配置加速器的实际运用
因为Docker在C/S中运行。我们的本机是C,Docker引擎是S。实际的构建过程是在Docker引擎下完成的,因此此时无法使用本地文件。这需要将本地机器指定目录中的文件打包并提供给Docker引擎使用。 如果未指定最后一个参数,则默认上下文路径为Dockerfile的位置。 注意:不要将无用的文件放在上下文路径中,因为它们将被打包并发送到docker引擎。如果文件太多,进程将很慢。
上进小菜猪
2022/12/19
7740
当项目需要使用Docker,对Dockerfile、配置加速器以及配置加速器的实际运用
Docker 容器使用
docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。
用户8647142
2021/07/27
5940
docker 镜像和容器
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
acc8226
2022/05/17
8570
Docker 容器连接
这样我们就可以通过访问 127.0.0.1:5001(主机) 来访问容器的 5000 端口。这里面默认都是绑定TCP要绑定UDP如下命令:
Criss@陈磊
2019/10/31
1.3K0
Docker端口映射与容器互联
在前面我们已经掌握了单个容器的管理操作,但是在实际工作中很少是只运行一个容器,而更多的是需要运行多个容器进行协作的情况,因此就需要多个容器之间能够互相访问到对方的服务,那么本篇文章就来学习Docker端口映射与容器互联相关的知识,注意本文所提到的宿主机是指VMware虚拟机,而非本地的Windows系统主机。
啃饼思录
2020/12/29
6.5K0
Docker端口映射与容器互联
docker 网络介绍
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。
dogfei
2020/07/31
4180
Docker 容器连接
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。
子润先生
2021/06/30
8880
【愚公系列】2022年01月 Docker容器 容器间相互通信
前面几篇文章已经说明Docker的容器和镜像相关操作,如果只是Docker的单机应用并不能满足需求,Docker内部间要能互相通信,在符合微服务思想,才能达到Docker真正作用。
愚公搬代码
2022/12/01
4240
【愚公系列】2022年01月 Docker容器 容器间相互通信
Docker 入门到实战教程(四)容器链接
在使用Docker容器时,我们需要访问容器的内部网络,或需要在容器间相互访问。Docker 容器默认不会开放任何端口,因此需要将容器与宿主机进行端口映射,使容器可外部访问。而容器间互相访问,除了可以基于端口映射进行访问外,还可以通过容器链接(Link)的方式,也可以通过Docker 网络(Networking)实现。
小东啊
2020/07/23
1.9K0
Docker 入门到实战教程(四)容器链接
Docker 容器使用
docker客户端非常简单,我们可以直接输入docker命令来查看到 Docker 客户端的所有命令选项。
子润先生
2021/06/30
5910
【愚公系列】2022年01月 Docker容器 Docker运行web应用
docker相当于一个微型系统,但端口是不和外界相通,如果在docker里安装web应用需要暴露端口让外界可以访问,这就需要把docker端口映射到真实机器上来才能让外界访问web应用。
愚公搬代码
2022/12/01
2750
【愚公系列】2022年01月 Docker容器 Docker运行web应用
Docker学习笔记1 -- 刚入手docker时的几个命令
镜像标签可以理解为版本号。比如我们项目demo的版本是1.5.1,那么标签可以是:
Ryan-Miao
2019/03/04
4610
Docker从入门到精通(四)
我们经常碰到服务之间要进行公共协作,所以容器之间要能互相访问,其实除了网络访问外,docker提供两种方便的方式
小土豆Yuki
2023/02/23
3960
Docker从入门到精通(四)
docker部署web项目_docker到底怎么用
前面我们运行的容器并没有一些什么特别的用处。 接下来让我们尝试使用 docker 构建一个 web 应用程序。 我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
全栈程序员站长
2022/09/19
6650
docker部署web项目_docker到底怎么用
docker网络
容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。
超蛋lhy
2018/10/09
9530
docker网络
Docker理论与实践(三)
注:从上面可以看到主机的两个端口32769和80都映射到了容器的5000端口,可以在主机浏览器中访问http://localhost:32769/,http://localhost:80/,都能看到Hello world!页面。虽然两个容器的端口都是5000,但它们是不一样的,容器的namespace属性会将两个容器隔离开,因此它们对应的主机端口是不一样的。
Tyan
2022/05/09
1990
Docker学习——数据管理、使用网络(三)
这一章介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:
wuweixiang
2018/12/06
5520
centos7.4安装docker_pythondocker
当我们在一台电脑上搭建了python3.6的环境,下次换台电脑,又得重新搭建一次,设置环境变量等操作。 好不容易安装好,一会提示pip不是内部或外部命令,一会又提示pip: command not found,想死的心都有了。 搭建环境是真的麻烦,不弄好又不行,从今天开始学好docker,环境问题从此和你说再见
全栈程序员站长
2022/09/16
2540
docker学习2-快速搭建centos7-python3.6环境
当我们在一台电脑上搭建了python3.6的环境,下次换了个电脑,或者换成linux的系统了,又得重新搭建一次,设置环境变量、下载pip等操作。 好不容易安装好,一会Scrips目录找不到pip.exe,一会提示pip不是内部或外部命令,一会又提示pip: command not found, 环境安装多了都是一把辛酸泪。 搭建环境成为不少小伙伴学习的障碍,从今天开始学好docker,环境问题从此和你说再见~~~
上海-悠悠
2019/07/04
2.1K0
Docker(三)——容器
通过exit退出当前交互式容器 守护进程容器 执行命令Ctrl+P加速Ctrl+Q的方式让容器成为守护式容器
羊羽shine
2019/05/28
5310
相关推荐
当项目需要使用Docker,对Dockerfile、配置加速器以及配置加速器的实际运用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文