gpt4 book ai didi

jenkins - 使用 Jenkins 和多配置复制工件时要聪明

转载 作者:行者123 更新时间:2023-12-01 23:58:32 24 4
gpt4 key购买 nike

假设我有一组(虚构的)项目:FOO 和 BAR。这两个项目都有某种多配置选项。

FOO 在轴 X 上有一个矩阵,它采用 { x1, ..., xn } 中的值(因此有 n 个 FOO 构建)。 BAR 在 Y 轴上有一个矩阵,它采用 { y1, ..., ym } 中的值(因此有 m 个 BAR 构建)。

但是,BAR 需要从 FOO 复制一些工件。事实证明,Y 是一个比 n 更精细的分区。例如,X 可能取值 { WINDOWS, LINUX }Y 可能是 { WINDOWS_XP, WINDOWS_7, DEBIAN_TESTING, FEDORA } 或其他。

是否有可能让 BAR 进行某种表格查找,以确定在复制工件时需要什么样的 FOO 配置?我可以轻松地编写一个 shell 脚本来吐出映射,但是当 Jenkins 计算出它需要复制的内容时,我不知道如何调用它。

目前,一个 hacky 解决方案是在 FOO 上有两个轴,一个用于 X,一个用于 Y,然后过滤掉不符合要求的组合感觉。但由此产生的组合过滤器很荒谬,矩阵非常稀疏。呸。

我不喜欢的一个解决方案是在 Y 上对 FOO 进行参数化:这会极大地浪费编译时间。更糟糕的是,生成的人工制品非常大,所以即使您进行了某种缓存,您仍然必须保留不必要的副本。

最佳答案

不能说我完全理解你的矩阵的复杂性,但我想我可以帮助你解决你的实际问题

"I can easily write a shell script to spit out the mapping, but I can't work out how to invoke it when Jenkins is working out what it needs to copy"

Archive the artifactsCopy artifacts from another project 构建后操作可以采用 java 样式的通配符,例如 module/dist/**/*.zip以及环境变量/参数,例如 ${PARAM}对于列表或工件。您可以使用逗号 ,添加更多工件。

从另一个项目复制工件的页面帮助说明了如何复制特定矩阵配置的工件:To copy from a particular configuration, enter JOBNAME/AXIS=VALUE , 这是给 Project Name 的属性。那project name属性还可以包含参数作为 ${PARAM}

因此,在您的BAR 作业中,有一个Copy Artifacts 构建步骤,使用Project Name正在FOO/X=${mymapping} .这将做的是:每次配置 BAR运行时,它将仅从 FOO 复制工件配置为 X=${mymapping} .

现在你需要设置${mymapping}的值每次动态BAR运行。像这样的简单脚本可能会起到作用:

[[ ${Y:0:7} == "WINDOWS" ]] && mymapping=WINDOWS || mymapping=LINUX

最后,你需要使用 EnvInject插件以使此变量可用于其余构建步骤,包括复制工件步骤。

所以,每次BAR配置运行,会查看自己的配置轴Y , 如果该轴以 WINDOWS 开头, 它将设置 ${mymapping}WINDOWS , 否则将其设置为 LINUX .这${mymapping}然后可用于其余的构建步骤。当Copy Artifacts执行构建步骤,它只会从 FOO 复制工件X在哪里轴匹配 ${mymapping} (即 WINDOWSLINUX )。

完整设置

  • 安装 EnvInject插件。
  • BAR 作业配置中,勾选Prepare an environment for the run (EnvInject 插件的一部分)。
  • 确保选中用于保留现有变量的两个复选框。
  • Script Content复制你的脚本:
    [[ ${Y:0:7} == "WINDOWS" ]] && mymapping=WINDOWS || mymapping=LINUX
  • 构建步骤下,配置复制工件构建步骤。
  • 项目名称参数设置为FOO/X=${mymapping}
  • 照常配置其余部分。

关于jenkins - 使用 Jenkins 和多配置复制工件时要聪明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22558326/

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