配置Jenkins以编程方式从构建参数确定构建时的从属设备?

时间:2015-06-21 02:00:46

标签: linux groovy jenkins

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

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

每个项目都建立在4个独立的从站上,其标签与其架构相关,即MIPS从站具有标签' mips' ' linux的&#39 ;.

我的目标是:

  1. 整合所有单独的工作。这样可以使我们更容易修改作业属性,并且更容易添加更多作业,而无需添加如此多的特定于架构的作业。
  2. 如果我们愿意的话,允许我们一次只构建一个架构。如果MIPS作业失败,我们只想为MIPS构建,而不是为其他人构建。
  3. 我查看了多配置'打字工作 - 目前我们只是使用简单的单一配置工作。我不确定多配置类型是否允许我们一次只构建单独的体系结构。我玩了配置矩阵,但不确定是否可以更改/调整以构建一个for 单个平台。看起来我可以使用Groovy语句来做到这一点?类似的东西:

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

    也许这可以简化为slave == label,其中label是作业的单一配置状态时的前名称,现在是构建参数吗?

    如果我们可以以编程方式为此选择奴隶,我认为我们不需要这样的多配置作业。

    我非常感谢有关如何整合我们所拥有的工作数量并根据作为构建参数的项目架构以编程方式更改目标从属的一些建议。

    非常感谢,

1 个答案:

答案 0 :(得分:0)

您可以使用系统groovy脚本创建包装器作业。你需要groovy插件。让我们调用包装器作业 - video-encoder-wrapper,这里有子弹如何配置它:

  • 定义参数ARCH
  • 根据步骤video-encoder

    ARCH参数将标签分配给Execute system Groovy script作业
    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参数

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

希望有所帮助

相关问题