Linux 将Jenkins配置为在构建时根据构建参数以编程方式确定从属?

Linux 将Jenkins配置为在构建时根据构建参数以编程方式确定从属?,linux,groovy,jenkins,Linux,Groovy,Jenkins,这可能是一个稍微不寻常的Jenkins查询,但我们有一个跨越许多项目的项目。它们都是基于Linux的,但它们跨越了多种体系结构(MIPS、SPARC、ARMv6、ARMv7) 对于一个特定的组件,我们称之为“视频编码器”,因此我们将有4个项目:mips视频编码器、sparc视频编码器等 每个项目都构建在4个独立的从机上,其标签与其体系结构相关,即MIPS从机的标签为“MIPS”“linux” 我的目标是: 合并所有单独的工作。这将使我们更容易修改作业属性,也更容易添加更多作业,而无需添加这么多特

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

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

每个项目都构建在4个独立的从机上,其标签与其体系结构相关,即MIPS从机的标签为“MIPS”“linux”

我的目标是:

  • 合并所有单独的工作。这将使我们更容易修改作业属性,也更容易添加更多作业,而无需添加这么多特定于体系结构的作业
  • 如果我们愿意,允许我们一次只构建一个体系结构。如果MIPS作业失败,我们希望只为MIPS而不是为其他人构建
  • 我已经研究了“多配置”类型的作业——目前我们只使用简单的单配置作业。我不确定多配置类型是否允许我们一次只构建单个架构。我曾尝试过配置矩阵,但不确定是否可以将其更改/调整为只为单个平台构建一个配置矩阵。看起来我可以使用Groovy语句来实现这一点?比如:

    (label=="mips".implies("slave"=="mips")
    
    也许可以简化为slave==label,其中label是作业处于单一配置状态时的前名称,现在是一个构建参数

    我认为,如果我们可以通过编程方式选择从机,我们不需要多配置作业

    我非常感谢您提供一些建议,告诉我们如何根据项目的架构(这是一个构建参数),整合我们拥有的作业数量,并通过编程更改目标从机


    首先非常感谢,

    您可以使用系统groovy脚本制作包装器作业。为此,您需要groovy插件。让我们调用包装器作业-
    视频编码器包装器
    ,下面是如何配置它的要点:

    • 定义参数
      ARCH
    • 根据步骤
      Execute system Groovy script
      ARCH参数,将标签分配给
      视频编码器
      作业

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

    • 选中
      视频编码器
      作业配置中的选项
      设置构建名称
      ,并将其设置为
      ${ENV,var=“ARCH”}-#${Build\u NUMBER}
      。它将允许您轻松跟踪构建历史
    • 禁用
      视频编码器包装
      作业的并发生成。它将防止同时将两个不同的标签分配给
      视频编码器
      作业

    希望能有所帮助

    这些工作的共同点是什么?只有参数,或者也有常见的构建步骤?有一些常见的构建步骤:实际上,我们将“cd”放入目录并运行“make ARCH=”,其中ARCH=mips/armv7/等等。我们总是将相同的文件名复制回来,所以没有问题。您的意思是仍然保留单独的armv7/ARMv6/mips包并使用此包装器吗?这无助于我们减少詹金斯的工作。如果我“将您的参数ARCH包含在视频编码器构建的名称中”,这是否允许我传递ARCH以生成(通过shell调用)并计算出将作业发送到的正确从机?感谢您不需要为不同的体系结构保留单独的作业。是,如果将
    ARCH
    参数传递给
    视频编码器
    作业,则可以将其传递给make。顺便说一句,我编辑了一点答案,以便更清楚地了解在构建名称中包含
    ARCH