詹金斯:如何决定应该执行以下哪些工作?

时间:2011-10-26 19:51:16

标签: build-automation jenkins

我有一系列工作,可以构建一个应用程序。我们称这个链为1。

我想在其他工作链(链2)的中间包含这些步骤。如果我这样做,链1的最后一个工作得到一个后续工作,当我只想构建原始链1时,我无法控制,不能构建。

   J1  
   |  
J2 J2  
|  |  
J3 J3  
   |
   J4

我不想复制J2和J3,但这不可能,不是吗?

3 个答案:

答案 0 :(得分:1)

我在stackoverflow.com上发现了一个受其他答案启发的解决方案:Jenkins - conditions between build steps

在前任作业中,我编写了一个带有Windows批处理作业的临时文件:

echo call_conditional_next_job = true > c:\temp\build.properties

要读出属性文件并设置一些环境变量,我使用“Jenkins Environment Injector Plug-in”。稍后在链中的几个作业我添加了以下windows批处理作业:

链中的几个作业我使用“Jenkins Environment Injector Plug-in”来读出属性文件。然后在同一个工作中我使用以下windows批处理作业来条件启动“条件下一个工作”jenkins工作:

IF "%call_conditional_next_job%"=="true" wget http://localhost:8080/job/conditional-next-job/build?delay=0sec  
IF NOT "%call_conditional_next_job%"=="true" echo "do not call conditional-next-job."

如果找到一种更优雅的方式在流中向下发送环境变量......那将很高兴知道。

答案 1 :(得分:0)

不像你描述的那样。

然而,疼痛并不是那么糟糕。在“新建作业”对话框中,您可以复制另一个预先存在的作业,因此您只需要复制J2和J3,然后更改J3的“构建后”标记。如果您不希望这两组作业出现在同一构建页面上,则可以使用插件来过滤作业。

答案 2 :(得分:0)

如果J1和J3共享一个通用的指纹文件,可能有办法使这个工作。

  1. 修改J1作业以在构建结束时调用J2(反过来,调用J3)。
  2. 修改J1作业以使升级过程在J3成功下游完成时触发。作为促销过程的一个动作,在另一个项目上添加一个Trigger构建,并指定J4作为要构建的项目。