此文需要有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 的触发方式的参数或者说内容有哪些:

GenericWebhookEnvironmentContributorReceived:{"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" ]; thenecho " It's develop , staging or master branch, exit " && exit 0figit checkout $branch

这个脚本之后写我们的test 的正常的逻辑,就ok了,可以按照分支自动切换执行了。

转载于:https://www.cnblogs.com/mingbai/p/Jenkins.html

Jenkins pipeline job 根据参数动态获取触发事件的分支相关推荐

  1. 获取触发事件的元素的ID

    有什么方法可以获取触发事件的元素的ID? 我在想类似的东西: <html><head><script type="text/javascript" s ...

  2. js第8章事件案例:获取触发事件的元素,阻止事件冒泡和默认行为的实现、缓动的小球、图片放大特效、按Enter键切换

    目录 1.获取触发事件的元素,阻止事件冒泡和默认行为的实现. (1)获取触发事件的元素 (2)阻止事件冒泡 (3)阻止事件默认行为 2.缓动的小球,实现的原理是通过定时器连续地修改当前DOM元素的某个 ...

  3. jenkins pipeline的parameters参数介绍

    这个指令允许我们为一个声明式流水线指定项目参数.这些参数的输入值可以来自一个用户或者一个API调用. 下面列举了所有合法的参数类型,以及他们的描述和示例: booleanParam 这是基本的true ...

  4. 怎么样用javascript获取触发事件的对象

     1  < script language = " javascript " >   2 document.onclick = onClick; // 当用户在文档中点 ...

  5. web3获取所有事件日志与解码

    获取所有事件&解析参数 封装获取所有事件的方法 const getEvents = (address, topic0, fromBlock = 1) => {return new Pro ...

  6. jenkins动态获取gitlab分支

    为什么要动态获取gitlab分支? 每个项目代码库都会有不同的分支,(如果你没有用多分支流水线的情况下)对于普通的流水线项目我们可以 让一条流水线来支持多个分支的发布,其实有时候你会发现每个分支的集成 ...

  7. Jenkins Pipeline动态使用Git分支名称的技巧

    前言 在上一篇 Jenkins 使用环境变量 中,帮助大家使用一条 Docker 命令就可以快速玩转 Jenkins,同时用最简单的方式解释了 Jenkins 中让人混乱的环境变量,本文还是接着变量说 ...

  8. php微信支付参数动态配置,支付,微信开发_微信支付动态如何获取$jsApiParameters参数,支付,微信开发 - phpStudy...

    微信支付动态如何获取$jsApiParameters参数 现在我们在做一个需要动态变换价格的微信支付页面,就是用户购买商品后,跳转到支付页面,但是可以选择几个不同的价格当中一个进行支付. 当跳到这个页 ...

  9. 事件冒泡及阻止事件冒泡 事件的触发 事件参数对象 获取用户按下键盘的键

    事件冒泡及阻止事件冒泡 <!DOCTYPE html> <html lang="en"> <head><meta charset=&quo ...

最新文章

  1. 合并下载的Solaris镜像为DVD文件的方法
  2. LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理
  3. Java编写的五子棋小游戏
  4. 字符串MD5加密和产生一个随机密码的方法
  5. jMeter HTTP Request Defaults 的学习笔记
  6. ios修改了coredata数据结构后,更新安装会闪退
  7. php cpu缓存 执行 代码,缓存PHP页面的代码,可以减轻CPU和MYSQL负担
  8. 最快15分钟,完成高精度AI模型定制开发
  9. 线程创建 pthread_create 中自定义参数注意事项
  10. LeetCode962. 最大宽度坡
  11. 【30天精通JavaScript ~ 网络篇】JavaScript 网络请求与远程资源
  12. linux安装富士施乐打印机驱动下载,Ubuntu 8.04下安装Xerox打印机记录
  13. 操作系统-消息,消息队列
  14. Windows10重装、安装 超级详细、小白教程 官方正版安装
  15. vs编译运行报错:未声明的标识符
  16. IB36分斩获藤校?看艺术设计类专业
  17. 动手学深度学习笔记(一)——权重衰退
  18. 计算机主板上安装有芯片组,解决方案:计算机主板上安装了哪些硬件设备?
  19. udp端口不可达 icmp
  20. c语言partition头文件,c语言_头文件_windows.h

热门文章

  1. oracle 11g r2 rac到单实例的dg
  2. Ping突然出现请求超时的问题
  3. 迷失第一季/全集Lost 1迅雷下载
  4. 函数式编程 读书笔记
  5. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)...
  6. ElasticSearch中doc values和fielddata
  7. 华为鸿蒙理性,华为的理性,鸿蒙的节奏
  8. (220)FPGA内部组成LUT介绍
  9. vs2017调用linux脚本,[代码] ShellExecute调用外部程序_VS2017
  10. mysql连接编码设置_MySQL基础 - 编码设置