Jenkins pipeline job 根据参数动态获取触发事件的分支
此文需要有Jenkins pipeline job 的简单使用经验
场景
我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据。
如果用Jenkins 作为自动跑新分支test任务的环境的话,就会面临一个问题:如何切换到PR请求对应的分支去跑test。
Jenkins 不能直接获取触发事件的git分支
自己在网上查了一下,发现网上现有的 Jenkins自动切换分支的帖子 ,要么创建了多个Jenkins job,用过滤规则去实现不同的分支触发不同的Jenkins;要么就是搞了个参数化构建,
自己手动的去选择不同的分支触发。
这两种方式,前者有可能建了一堆job,一旦有变动维护起来十分的痛苦。后者还得手动执行,一点都不酷。所以皆非我们所求。
通过Jenkins 参数、shell、git实现单job自动切换不同的分支
1,Jenkins 参数
在job里 勾上 print post content ,我们可以看到job 的触发方式的参数或者说内容有哪些:
GenericWebhookEnvironmentContributor
Received:
{"object_kind":"push","before":"d367a9948012f82095a8ead45a910672b","after":"bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54","ref":"refs/heads/develop","checkout_sha":"bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54","message":null,"user_id":142,"user_name":"xuao","user_email":"xao@sinail.com","project_id":531,"repository":{"name":"bizsvc","url":"ssh://git@172.0.0.0:10022/is/zsvc.git","description":"业务逻辑和页面服务。","homepage":"[http://172.16.99.4:10080/ibis/bizsvc](http://172.16.99.4:10080/ibvc)","git_http_url":"http://172.16.4:10080/ivc.git","git_ssh_url":"ssh://git@172.16.99.4:10022/ibsvc.git","visibility_level":10},"commits":[{"id":"de3e8d89cb73db90349505ed6de439f","message":"调试用临时分支\n","timestamp":"2019-04-04T14:25:54+08:00","url":"http://172.16.99.4:10080/ibis/bizsvc/commit/de3e8d89cb73db40099034a59bd9505ed6de439f","author":{"name":"wanglan","email":"wanglan_9999@163.com"}},{"id":"bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54","message":"Merge branch 'ttt' into 'develop'\r\n\r\n调试用临时分支\r\n\r\n\r\n\r\nSee merge request !863","timestamp":"2019-04-04T06:31:51+00:00","url":"[http://172.16.99.4:10080/ibis/bizsvc/commit/bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54](http://172.16.99.4:10080/ibis/bizsvc/commit/bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54)","author":{"name":"xumenghao","email":"xumenghao@sinorail.com"}}],"total_commits_count":2}
Contributing variables:
ref = refs/heads/develop</pre>
这里边的ref 就是我们要的关键参数
下边看看怎么取出来
Jenkins 的pipeline job 里的触发方式选择 Generic Webhook Trigger,勾上 展开后,在 Post content parameters 里可以填写参数。前两个框分别填上 ref 和 $.ref, 如下图:

这样,就可以在pipeline脚本里使用这个 ref变量了。
2, 处理参数和切换分支
此时,pipeline脚本内即可直接引用ref变量了。我们给我们要用的容器 安装个git,然后commit 一下当做跑test 的容器,就可以再脚本里用git 自动切换分支了。 具体看注释。
# 获取refs/heads/develop 最后一个‘/’之后的内容。即develop
branch=${ref##*/}
echo $branch
# 附送 跳过一般不用验证的分支
if [ $branch = "develop" ] || [ $branch = "staging" ] || [ $branch = "master" ]; then
echo " It's develop , staging or master branch, exit " && exit 0
fi
git checkout $branch
这个脚本之后写我们的test 的正常的逻辑,就ok了,可以按照分支自动切换执行了。
Jenkins pipeline job 根据参数动态获取触发事件的分支的更多相关文章
- javascript和jquery 获取触发事件的元素
一个很简单的问题,却因为大意,经常忘了处理,导致程序运行出错. <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- js获取触发事件的元素
//获取事件 var e = window.event; //获取元素 obj = e.target || e.srcElement; console.log(e); checkRepeat(e.ta ...
- jenkins回滚之groovy动态获取版本号
grovvy调试: 部署路径确定下来, 每个服务写死,传参 服务名 + 环境 给版本服务返回版本信息: groovy取分支: def gettags = ("git ls-remote -h ...
- Jquery 事件冒泡、元素的默认行为的阻止、获取事件类型、触发事件
$(function(){// 事件冒泡 $('').bind("click",function(event){ //事件内容 //停止事件冒泡 event.stopPropaga ...
- Jenkins+pipeline+参数构建+人工干预确定
Jenkins+pipeline+参数构建+人工干预 实现了以下功能 1. 可以选择环境,单选:可以选择需要发布的项目,多选 2.发布过程可视化 3. 可以人工干预是否继续发布. 初始化配置需要很久, ...
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数 iwpriv是处理下面的wlan_private_args的所有扩展命令,iwpriv的实现上,是这样的, ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- 在MVC过滤器中获取触发的Controller、Action、参数 等
首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...
- window.event.srcElement与window.event.target 触发事件的元素 触发事件对象的获取,window.event与时间函数参数的event是同一个 事件对象
判断事件触发的元素: var tag = window.event.target || window.event.srcElement; if (tag.tagName.toLowerC ...
随机推荐
- 推荐.Net、C# 逆向反编译四大工具利器
转自:https://blog.csdn.net/kongwei521/article/details/54927689 在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需 ...
- vue swiper中的大坑
mounted() { var self = this; for (var i = 0; i < self.$refs.mySwiper.swiper.pagination.bullets.le ...
- TV TimeShift和PVR的区别
Timeshift是在PVR菜单下,PVR菜单下一般有两个功能一个是刻录功能,一个是Timeshift功能,这两个功能都需要u盘或者内存卡的支持,刻录时把当前的节目刻录进优盘想看的时候还可以打开看,T ...
- C++关于string的一些用法
#include <iostream> #include <algorithm> #include <functional> using namespace std ...
- 【easy】107. Binary Tree Level Order Traversal II 按层输出二叉树
按层输出二叉树,广度优先. 3 / \ 9 20 / \ 15 7 [ [15,7], [9,20], [3] ] /** * Definition for a binary tree node. * ...
- PostMan如何做Post请求测试
首先要下载 一个Postman的软件,我这里没有下载地址,据说要翻 墙 下面是使用postman模拟post请求的步骤 我这里请求的API地址和请求的参数都是乱填写的,使用的时候请自行替换你们需要的A ...
- (转)理解maven命令package、install、deploy的联系与区别
我们在用maven构建java项目时,最常用的打包命令有mvn package.mvn install.deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命 ...
- Python 包管理(PYPA)
Python包的管理可以通过Python 自带的管理 工具,例如:package-autoremove,package-list-packages, package-install 等,使用起来也非常 ...
- 图像识别与OpenCV——Mat类与Mat_类的内存管理
Mat_类是对Mat类的一个包装,其定义如下: template<typename _Tp> class Mat_ : public Mat { public: //只定义了几个方法 // ...
- windows 安装memchched和memcache教程
Memcached是一个内存缓存系统,而Memcache是php的一个扩展,是php用于操作和管理Memcached的工具.如果安装了Memcached但没有安装Memcache,php无法操控Mem ...