此文需要有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 根据参数动态获取触发事件的分支的更多相关文章

  1. javascript和jquery 获取触发事件的元素

    一个很简单的问题,却因为大意,经常忘了处理,导致程序运行出错. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  2. js获取触发事件的元素

    //获取事件 var e = window.event; //获取元素 obj = e.target || e.srcElement; console.log(e); checkRepeat(e.ta ...

  3. jenkins回滚之groovy动态获取版本号

    grovvy调试: 部署路径确定下来, 每个服务写死,传参 服务名 + 环境 给版本服务返回版本信息: groovy取分支: def gettags = ("git ls-remote -h ...

  4. Jquery 事件冒泡、元素的默认行为的阻止、获取事件类型、触发事件

    $(function(){// 事件冒泡 $('').bind("click",function(event){ //事件内容 //停止事件冒泡 event.stopPropaga ...

  5. Jenkins+pipeline+参数构建+人工干预确定

    Jenkins+pipeline+参数构建+人工干预 实现了以下功能 1. 可以选择环境,单选:可以选择需要发布的项目,多选 2.发布过程可视化 3. 可以人工干预是否继续发布. 初始化配置需要很久, ...

  6. iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数

    iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数 iwpriv是处理下面的wlan_private_args的所有扩展命令,iwpriv的实现上,是这样的, ...

  7. java动态获取WebService的两种方式(复杂参数类型)

    java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...

  8. 在MVC过滤器中获取触发的Controller、Action、参数 等

    首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...

  9. window.event.srcElement与window.event.target 触发事件的元素 触发事件对象的获取,window.event与时间函数参数的event是同一个 事件对象

    判断事件触发的元素:     var tag = window.event.target || window.event.srcElement;    if (tag.tagName.toLowerC ...

随机推荐

  1. luogu P5324 [BJOI2019]删数

    传送门 不如先考虑暴力,能删的序列首先有\(1,2,3...n\),还有就是升序排序后从后往前放数,第\(i\)位要么放\(i\),要么放\(i+1\)位置的数,例如\(1,2,4,4,5,6,9,9 ...

  2. Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别

    Python是一种面向对象.解释型计算机程序设计语言.Python 语法简洁.清晰,具有丰富和强大的类库.Python源代码遵循 GPL (GNU General Public License) 协议 ...

  3. 关于SVN报错 svn: E170013 E125006: contains invalid filesystem format option 'addressing logical'

    在使用svn的时候,遇到了这样的一个问题 首先我使用TortoiseSVN 右键创建的repository. 之后用IDEA,配置了1.9.4版本的SVN,去commit访问这个仓库 结果出现了以下的 ...

  4. Nginx开启gzip压缩解决react打包文件过大

    用create-react-app创建的react应用打包之后的build js有1M之多. 采用gzip打包传输,可以节约70%左右的带宽 nginx采用gzip打包方式 在nginx配置中添加如下 ...

  5. ABP代码生成器与升级到VS2017VSIX

    首先,我不是要分享一个代码生成器,而是怎么升级到VS2017,简单介绍下 如何将2015的VSIX项目升级到2017 阳光铭睿 写了一篇<分享一个与ABP配套使用的代码生成器源码>,并在群 ...

  6. Linux下查看CPU型号,内存大小,硬盘空间,进程等的命令(详解)

    转自:http://www.jb51.net/article/97157.htm 1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physic ...

  7. C# 7.0特性

    一.out的形参变量无需再提前声明 befor: "; int numericResult; if (int.TryParse(input, out numericResult)) Cons ...

  8. 获取Windows服务下当前路径的方法

    获取Windows服务下当前路径的方法 获取当前运行程序路径 包含exe Assembly.GetExecutingAssembly().Location; D:\xxxxxx\bin\Debug\x ...

  9. C++入门篇十

    静态成员变量:可以共享数据,类内声明,类外初始化(实现) // 静态成员变量.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include &q ...

  10. 协议形式化分析Scyther 资料整理

    1.性能分析 目前来说形式化的分析已经成为安全协议的一种很流行的方法,但是每种工具都用其不同适合的协议,Scyther软件是一种形式化分析工具,极大的促进了协议的分析和设计,scyther工具在运行界 ...