Jenkins的job和job中间传递参数

本文介绍了在Jenkins中如何实现job之间的参数传递,包括使用Parameterized Trigger Plugin、保存文件、properties文件以及EnvInject Plugin插件的方法。详细阐述了各种方式的优缺点和实际应用场景,特别是对于自定义变量和环境变量的传递。

有时候需要将上游job的某些值传递到下游job中使用,自己使用的几种方法记录一下。

场景一、job之间的变量传递

当有两个job,jobA进行代码编译,jobB进行环境部署。我们需要先进行jobA执行,执行成功之后再执行jobB 如果两个job之间不需要有变量的传递,那么可以选择:Build other projects

但是如果需要传递参数选择Trigger parameterized build on other projects(需要有插件:Parameterized Trigger Plugin)

1.使用插件Parameterized Trigger Plugin

 

 

插件可以实现Job间参数传递但是有局限性,我们只能选择传递当前build的参数或者环境变量。而且这个变量只能是上级job中参数化时传入的,shell中进行了修改也不会改变。如果要传递一个自定义的变量怎么办呢? 构建步骤中的自定义变量在执行结束后都会被回收,我们不可能在"predefined parameters"中取到。

 

2.使用保存文件的方式

执行jobA的时候将需要的变量存在一个var.txt中,jobB需要使用时就将到这个目录下,获取文件中的内容

或者使用一个从文件中获取的插件:Extended Choice Parameter

 

使用绝对路径  文件test.txt内容:sid=fshdfkhsdjkfhsfsdhjkfh

 jobA保存在文件中的sid就能给jobB使用了。

但是保存文件的方式,如果是用不同的slave,在不同服务器上,保存文件的方式就不好处理了。所以有了以下两种方法:

3.通过properties file的方式传递参数(仍然需要插件:Parameterized Trigger Plugin)

现有上游job:[test-file-parameters] 和下游job:[test-job] 

在[test-file-parameters]中有参数:compiled 默认值:123456

删除原来老的数据 然后可以对变量进行一些操作之后,然后以"xx=xx"的样式写入到配置文件『propfile.txt』中。

IFUT=$compiled  IFUT是下游job test-job里的变量  compiled是上游job test-file-parameter里的变量

然后在"Trigger parameterized build on other projects"中选择"Parameters from preperties file",在propfile里写入多个变量就可以传递多个值。

在[test-job]中有参数 IFUT  这个值要和profile.txt里的key值一样 否则无法传递

查看一下IFUT最终的值 是不是上游job中shell里修改成的3333333

构建上游job:[test-file-parameter] 构建成功之后会触发test-job 传递自定义变量成功!

4.通过EnvInject Plugin插件

EnvInject Plugin可以支持修改、注入和删除环境变量。

同样添加shell脚本,变量传递

我们在构建中增加步骤"Inject environment variables", 将写在配置文件中的变量${IFUT},注入到环境变量里。

在"Trigger parameterized build on other projects"就可以直接选择"predefined parameters"方式直接传递变量了。

 

同样的在Job『test-job』里就可以直接访问变量${IFUT}了。

       上面两种方法,都是通过profile.txt文件的方式,通过这个配置,可以将自定义的变量值不仅能传递,而且还能自定义修改值。这样的话,当上游需要传递一个自定义变量,这个变量又是通过shell脚本中修改过的,就可以使用profile.txt方式。

 

场景二:Job构建步骤间的变量传递

有时为了使Job中的复杂的构建流程更加清晰我们配置多个构建步骤像下面这样。图中包含两个构建步骤,步骤2需要根据步骤1中的返回值来判断是否执行操作:

执行时jenkins将两个构建步骤生成两个shell文件,然后分别调用。
do_build_step_1
[Jenkins] $ /bin/bash -xe /tmp/hudson1270042613896791809.sh
do_build_step_2
[Jenkins] $ /bin/bash -xe /tmp/hudson5918908417824291692.sh
理论上两个shell之间是无法通信的,step1执行完之后变量$dostep2就会被回收,要注意试图在step1中通过export或者其他脚本方式注入环境变量都是无效的。

解决方案:读写文件
要实现它们之间的变量传递只能通过读写文件的方式。我们有一个真实应用场景是这样的,配置由git push触发编译任务,但是并不是每一次git的提交都需要触发编译,比如说只有前端代码的提交其实并不影响编译的结果,我们只好在step1中加入判断来却确定step2是否真的有必要被执行。

参考:

https://www.cnblogs.com/junneyang/p/5239480.html

https://www.cnblogs.com/silvi/articles/7404320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值