1 背景

开发打包的 jenkins job A 是在 local 的一台 windows 上,同时在这台 local 的 windows 上还有一 另一个 jenkins job B 是用来上传 job A 生成的包(build)到测试平台的仓库(比如 saucelabs storage)。然而 我们测试的 jenkins job C 是在 azure 上的一台 windows server 2012 上。我们期望的是当 job A 一旦有包(build)生成就传递 build number 给 job B 同时触发 job B 运行,一旦 Job B 运行就会 上传 build 到测试平台的仓库,接着由 job B 把 build number 传递给 Job C 同时触发,job C 运行。那么 问题就来了 job B 和 Job C 不在同一台机器,job B 怎么实现传参数远程触发 job C 呢? 下面 我们分两部分来介绍。

2 同一 jenkins 传参触发

要实现同一 jenkins 上的 job A 传递参数(build number)并触发 job B 运行我们需要做的步骤如下:

1、首先安装 jenkins 参数化插件:Parameterized Trigger Plugin。

2、对 Job A 进行配置;在 Job A 配置面板中 Post-build Actions 选项中选择 Trigger parameterized build on other projects ,如下图:

3、对 Job B 进行配置;在 JobA 中配置了 build_number 参数,在 B job 中要使用此参数,那么需要在Job B 的配置界面中勾选 The build is parameterized。具体配置信息如下所示:

4、检查参数是否成功的由 Job A 传给了 Job B;在 job B 的 windows bat 窗口输入如下命令,在 job B 的控制查看输出参数是否正确。如下图:


经过上面几步我们就可以很容易的实现同一 jenkins 的传参触发,愉快的享用吧。

3 不同 jenkins 传参远程触发

要实现不同 jenkins 上的 job B 传递参数(build number)并触发远程机器上的 job C 运行我们需要做的步骤如下:

1、首先要把 Job A 传递给 Job B 的参数 build_number 以 key-vaule 的方式(便于 job C 读取参数使用和更新参数)写入属性文件(test.properties),在 Job B 中使用如下命令:

echo build_name="%build_number%" >> E:\test.properties
  • 1

如下图:

2、获取 Job C 所在的 jenkins 的 API Token,如下图所示:

3、在 Job B 中使用 jenkins 的 remote API 通过 curl 命令行来传参数给 Job C 并触发 Job C 运行,具体命令如下:

curl -X POST http://192.168.181.11:8080/job/C/build --user linda:2a2511f75356f6691f6049bf9ee3806b  --form file0=@"E:\test.properties" --form json="{\"parameter\": [{\"name\":\"test.properties\", \"file\":\"file0\"}]}
  • 1

如下图:

上面执行的命令参数说明:

  • 192.168.181.11:8080 是 job C 所在的 windows 2012 sever 的 ip 地址;
  • C 是 job 的名称,这里我们触发的是 Job C;
  • linda:2a2511f75356f6691f6049bf9ee3806b 中 linda 是 jenkins 用户名,2a2511f75356f6691f6049bf9ee3806b 是 jenkins 的 API Token;

4、既然是通过文件传递参数那么 Job C 也要配置接收。如下图:

经过上面几步我们就可以很容易的实现不同 jenkins 传参远程触发,愉快的享用吧。总之这样一来当 job A 带参数触发了 job B,Job B 带参数文件触发 Job C,你会看到在 Job C 的根目录下有了参数文件test.properties,这样就可以在 Job C 中使用该参数去测试平台的仓库获取对应的 build 来进行全自动化测试。

附上 jenkins remote api 的 URL: https://wiki.jenkins.io/display/JENKINS/Remote+access+API

Jenkins job 之间实现带参数触发的更多相关文章

  1. vue-如何实现带参数跳转页面

    [前后端分离项目之vue框架经验总结] 文/朱季谦 在vue框架的前端页面上,若要实现页面之间的带参数跳转,可参考以下实现过程: 例如,点击截图中的“查看试卷”,可实现带参跳转到相应的试卷页面,该功能 ...

  2. react 中 Modal 多次使用且带参数不同实现

    一.举例:对于 echatrs 的柱子分别需要弹窗 带参数 触发弹窗出现事件 showModalhref myChart.on('click', (params) => { switch (pa ...

  3. 【转】如何在命令行脚本中启动带参数的Windows服务

    我们有一个自己编写的Windows服务,我们希望该服务在启动时可以根据用户输入的参数实现不同的功能. 要实现这样的需求并不是很难,下面这个例子我用来示范如何编写该服务 using System; us ...

  4. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  5. Force.com微信开发系列(八)生成带参数的二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...

  6. SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...

  7. Jenkins: 使用groovy + job-dsl 创建并触发job

    Jenkins: 使用groovy + job-dsl 创建并触发job 背景: 我们的 Automation 测试脚本需要在10个不同语言的机器上跑,本地化测试产品. 我们用Jenkins启动测试执 ...

  8. 带参数的Mixin

    带参数的mixin 在Less中,还可以像函数一样定义一个带参数的mixin, 这种形式叫做 Parametric Mixin,即带参数的混入.如: // 定义一个样式选择器 .borderRadiu ...

  9. PHP带参数传值调用python脚本

    PHP主要用在服务器端做网站后台开发,有些功能用PHP来实现有点费劲或者无法实现,现在在学习python,同样是脚本语言,感觉python能做的事情PHP不一定能胜任.但是现在大部分的网站后台也是用P ...

随机推荐

  1. python学习笔记第一周

    目录: 一.基础概念 1.变量与常量介绍 2.引号的使用 3.条件判断 4.while与for循环 5.input输入 6.getpass模块 7.python编码 二.作业 1.个人登录系统 2.多 ...

  2. freeSSHd (Auth fail)错误!以及Xmanager的(ssh服务器拒绝了密码,请再试一次)错误!

    参考文档:http://blog.csdn.net/zhangliang_571/article/details/45598939 (Auth fail) 以及(ssh服务器拒绝了密码,请再试一次)  ...

  3. zzuli2226:神奇的薯条

    题目描述 小明拿了n元钱去买薯条,薯条小份3元,大份7元.现在小明想知道如果只买薯条,自己的钱是否可以刚好花完,请你设计一个程序帮他计算一下. 输入 第一行输入一个整数T,表示实例数量.(1<= ...

  4. Beta周第14次Scrum会议(11/23)【王者荣耀交流协会】

    一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/23 17:02~17:14,总计12min. ...

  5. Linux中ctrl+z,ctrl+d和ctrl+c的区别

    Ctrl-c Kill foreground processCtrl-z Suspend foreground processCtrl-d Terminate input, or exit shell

  6. (5)css样式导入

    样式的组成 1.选择器:将样式与页面中的某一个或某些标签建立联系,就要使用选择器,在head标签下写一个style标签,将需控制参数的标签名写在这个style标签下,设置属性即可通过css来控制htm ...

  7. 【递推】【HDOJ】

    http://acm.hdu.edu.cn/showproblem.php?pid=2501 Tiling_easy version Time Limit: 1000/1000 MS (Java/Ot ...

  8. ios-根据单元格里的控件tag值,在方法外获得对应的section与row的值

    在cell的代理方法里:cellForRowAtIndexPath btn.tag = indexPath.section *100 + indexPath.row; [cell.exitPerson ...

  9. 【liunx】时间处理函数

    一.脚本示例 [mylinuxaccount@linux01 ~]$ date +%Y%m%d 20171224 [mylinuxaccount@linux01 ~]$ date +%F 2017-1 ...

  10. BINLOG和REDO/UNDO LOG的区别

    BINLOG和REDO/UNDO LOG的区别1.处理层次不同,REDO/UNDO LOG由Innodb存储引擎处理,而BINLOG由MySQL 服务层处理.2.记录内容不同,REDO/UNDO LO ...