gpt4 book ai didi

linux - 配置 Jenkins 在构建时通过构建参数以编程方式确定从属?

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:58 25 4
gpt4 key购买 nike

这可能是一个有点不寻常的 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是作业处于单一配置状态时的前名称,现在是构建参数?

我认为,如果我们能够以编程方式为此选择从属设备,那么我们就不需要为此进行多配置作业。

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

提前非常感谢,

最佳答案

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

  • 定义参数ARCH
  • 通过步骤执行系统 ​​Groovy 脚本,根据 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 作业配置中的设置构建名称选项,并将其设置为 ${ENV,var="ARCH"} - #${BUILD_NUMBER}。它将允许您轻松跟踪构建历史记录。
  • 禁用 video-encoder-wrapper 作业的并发构建。它将阻止同时向 video-encoder 作业分配 2 个不同的标签

希望对你有帮助

关于linux - 配置 Jenkins 在构建时通过构建参数以编程方式确定从属?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30960587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com