4

我有 2 个工作:“Helper”和“Main”以及单个 jenkins 实例(即主机和执行程序)。

助手管理第 3 方资源并为 Main 作业做准备(准确地说 - 它为要部署以进行测试的应用程序创建环境)。

辅助作业的唯一工件是具有环境 IP 的单个文件,专门为 Main 作业准备。

在这种情况下,我如何将构建从 Helper 传递回 Main?

4

2 回答 2

8

您是说您只需将带有 IP 的文件传递给“主要”作业。如果您只需要该 IP,则有更简单的方法(无需文件),我将同时描述这两种方法。

将工件从一个工作传递到另一个工作

在“Helper”作业中,您需要从工作区归档该文件。

  1. post-build actions中,选择Archive the artifacts
  2. 放置一个相对于工作空间的路径。您可以使用通配符,或硬编码文件名(如果文件名始终相同)。
  3. 将此作业配置为在其他项目构建步骤上使用触发/调用构建自动触发您的“主要”作业。如果你没有这个插件,你可以在这里获取
  4. 对于Projects to build,输入您的“主要”作业的名称

现在,在“主要”作业中,您需要从前一个(“助手”)作业中复制此工件。

  1. 对于第一个构建步骤,选择从另一个项目构建步骤复制工件。如果你没有这个插件,你可以在这里获取
  2. 对于Project name,输入您的“Helper”作业的名称
  3. 对于哪个构建,选择最新的成功构建
  4. 对于要复制的工件,请使用**/yourartifactname*.*您的工件名称将是您在“助手”作业中配置的名称。在前面使用**/确保它会在进入工件之前忽略任何目录结构
  5. 对于Target directory,在“主要”作业的工作区中指定一个位置,该文​​件也将被复制到该位置。
  6. 选中Flatten directory,以便文件直接转到步骤 5 中指定的位置,否则它将保留存档时的目录结构(在“Helper”作业中)

现在,您的“主要”作业在其工作区中有来自“助手”作业的文件。像使用工作区中的任何其他文件一样使用它

将变量从一个作业传递到另一个作业

就像我提到的那样,如果您只需要一个 IP 地址,您在“Helper”作业中的某个时间点将其作为变量,您只需使用其他项目上的 Trigger/Call 构建步骤将其发送到“Main”作业您在“Helper”作业的步骤 3 和 4 中配置的内容。在这种情况下,您不需要对“主要”作业进行任何特殊配置。

  1. 配置“Helper”作业以在其他项目构建步骤上使用 Trigger/Call 构建自动触发您的“Main”作业。如果你没有这个插件,你可以在这里获取
  2. 对于Projects to build,输入您的“主要”作业的名称
  3. 单击添加参数按钮
  4. 选择预定义参数
  5. Type VarForMain=$VarFromHelper,其中VarFromHelper包含您的 IP 地址的“Helper”作业中VarForMain的环境变量,以及将在“Main”作业中设置为此值的环境变量。没有理由为什么这些不能具有相同的名称。

现在,在您的“主要”工作中,您可以$VarForMain像引用任何其他环境变量一样引用

于 2013-01-28T17:37:35.133 回答
2

接受的答案对我来说没有帮助,但我想出了一个窍门:

  1. 使用 shell 命令创建一个主作业

    echo "PARAMS_FILE=${WORKSPACE}/build-${BUILD_NUMBER}.params" > "${WORKSPACE}/build-${BUILD_NUMBER}.params"
    
  2. 通过将子作业添加到构建步骤(不是构建的步骤)来创建子作业

  3. 将文件作为参数源传递给子构建,并让构建在其脚本中使用一行更新文件,例如:

    echo "MY_VAR=some_value" >> "$PARAMS_FILE"
    

这样,所有后续作业的环境都会根据其前任的结果进行更新。

于 2014-07-21T01:28:25.000 回答