如今有两个Project『run_compile』和『run_deploy』,代码编译成功后开始执行环境部署。不须要传递参数的状况下能够选择“Build 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插件
咱们在构建中增长步骤"Inject environment variables", 将写在配置文件中的变量${IFUT},注入到环境变量里。
这样在"Trigger parameterized build on other projects"就能够直接选择"predefined parameters"方式直接传递变量了。一样的在Job『run_deploy』里就能够直接访问变量${IFUT}了。
原文:https://www.cnblogs.com/junneyang/p/5239480.html