[Jenkins]传递自定义变量:job内部步骤传递 & job之间传递

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

譬如『Execute shell』1 中的自定义变量传给『Execute shell』2

解决方法:读写文件 或 export导出变量

 

场景二: Job之间的变量传递

现在有两个Project『run_compile』和『run_deploy』,代码编译成功后开始执行环境部署。不需要传递参数的情况下可以选择“Build other projects“的方式。

 

 

需要传递参数则需要选择"Trigger parameterized build on other projects"的方式。

 

 

Jenkins Parameterized Trigger plugin可以实现Job间参数传递但是有局限性,我们只能选择传递当前build的参数或者环境变量。 (例:$GIT_COMMIT是git plugin提供的一个变量,存着当前build触发时最新的git code.) 如果要传递一个自定义的变量怎么办呢? 构建步骤中的自定义变量在执行结束后都会被回收,我们不可能在"predefined parameters"中取到。

依旧以编译任务为例,前端代码的提交不需要触发编译,没有编译也就不需要执行接下来的『run_ut』单元测试。(泛指后台代码的UT, JS UT这种稀有存在暂不考虑)

如何将编译的状态告诉下游的单元测试呢?

聪明的你想起了场景一的解决办法。对,我们也可以通过读写文件的方式来解决这个问题嘛!

不过这里我不推荐大家采用这种方式,理由有两点:

一,『run_compile』和『run_ut』有可能被部署在不同slave上,如果考虑更加智能的CI配置方式会在构建时动态的选择空闲的slave去执行,这种文件读写的方式就有了很大的局限性;

二,很难确保文件传递的准确性,如果『run_compile』写入文件失败,『run_ut』中读到的就是一个旧值一个不准确的值。

 

解决方案一:通过properties file的方式传递参数。

首先将变量以"xx=xx"的样式写入到配置文件『propfile.txt』中。

 

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

 

建议勾选"Don't trigger if any files are missing"和删除旧文件配合使用。

最后在『run_ut』中可以直接获取这个变量来使用了。

 

 

解决方案二: 通过EnvInject Plugin插件

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

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

 

 

这样在"Trigger parameterized build on other projects"就可以直接选择"predefined parameters"方式直接传递变量了。同样的在Job『run_deploy』里就可以直接访问变量${IFUT}了。

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值