configurationJenkins以编程方式从构build参数在构build时确定从属?

这可能是一个不寻常的Jenkins查询,但是我们有一个跨越很多项目的项目。 它们都是基于Linux的,但它们跨越多种体系结构(MIPS,SPARC,ARMv6,ARMv7)。

对于一个特定的组件,我们称之为“video编码器”,因此我们将有4个项目:mips-video-encoder,sparc-video-encoder等。

每个项目都build立在4个独立的从属设备上,标签与其架构相关,也就是说,MIPS从设备具有标签'mips''linux'。

我的目标是:

  1. 巩固我们所有的独立工作。 这应该使我们更容易修改作业属性,也更容易添加更多的作业,而不需要增加这么多架构特定的作业。
  2. 如果我们愿意的话,让我们一次只能build立一个架构。 如果MIPS工作失败,我们希望只为MIPS而不是其他人。

我已经看了“多configuration”types的工作 – 目前我们只使用简单的单一configuration工作。 我不确定多configurationtypes是否允许我们一次只构build单独的体系结构。 我有一个configurationmatrix玩,但不知道这是否可以改变/适应只是build立一个单一的平台。 它看起来像我可以使用Groovy语句来做到这一点? 就像是:

(label=="mips".implies("slave"=="mips") 

也许这可以简化为像奴隶==标签其中标签是工作的原来的名字,当它在单一configuration状态,现在是一个build立参数?

我想我们不需要一个多configuration工作,如果我们可以编程方式select这个奴隶。

我将非常感谢一些build议,关于如何整合我们所拥有的工作数量,并根据作为构build参数的项目体系结构以编程方式更改目标从属服务器。

提前谢谢了,

你可以用系统的groovy脚本来做一个包装工作。 你需要这个groovy插件。 让调用包装工作 – video-encoder-wrapper ,这里是项目符号如何配置它:

  • 定义参数ARCH
  • 通过Execute system Groovy script ,根据ARCH参数为video-encoder作业分配标签

     import hudson.model.* encoder=Hudson.instance.getItem('video-encoder') def arch =build.buildVariableResolver.resolve("ARCH") label= Hudson.instance.getLabel(arch) encoder.setAssignedLabel(label) 
  • 调用非阻塞下游项目video-encoder ,不要忘记传递ARCH参数

  • 检查video-encoder作业配置中的Set Build Name选项,并将其设置为${ENV,var="ARCH"} - #${BUILD_NUMBER} 。 它将允许您轻松地跟踪构建历史。
  • 禁用video-encoder-wrapper作业的并发构建。 它将防止同时向video-encoder作业分配2个不同的标签

希望能帮助到你