一尘不染

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

jenkins

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

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

每个项目都建立在4个独立的从站上,并带有与其架构相关的标签,即MIPS从站具有标签“ mips”,“ linux”。

我的目标是:

  1. 巩固我们所有单独的工作。这应该使我们更轻松地修改作业属性,并且更容易添加更多作业,而无需花费大量精力来添加大量特定于架构的作业。
  2. 如果愿意,允许我们一次只构建一个体系结构。如果MIPS作业失败,我们只想为MIPS而不是其他人构建。

我看过“多配置”类型的作业-
目前,我们仅使用简单的单一配置作业。我不确定“多配置”类型是否允许我们一次仅构建单个体系结构。我玩过配置矩阵,但不确定是否可以更改/修改它以仅针对 单个
平台构建。看来我可以使用Groovy语句来做到这一点?就像是:

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

也许可以简化为诸如slave == label之类的东西,其中label是作业处于单一配置状态时的前一个名称,现在是一个构建参数?

我认为,如果我们可以以编程方式为此选择从站,则我们不需要多配置作业。

我将不胜感激一些建议,以帮助我们如何合并已有的工作数量,并根据作为构建参数的项目体系结构以编程方式更改目标从属。

提前谢谢了,


阅读 276

收藏
2020-07-25

共1个答案

一尘不染

您可以使用系统常规脚本进行包装工作。您需要为此使用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 Namevideo-encoder并将其设置为${ENV,var="ARCH"} - #${BUILD_NUMBER}。它可以让您轻松跟踪构建历史。

  • 禁用并发video-encoder-wrapper作业。这样可以防止同时为video-encoder作业分配2个不同的标签

希望能帮助到你

2020-07-25