从Jenkins中的另一个作业获取Build Number作为变量

时间:2017-01-25 19:23:53

标签: jenkins

我正在运行一个Build Flow作业,它并行执行多个构建,然后使用Post-build Action发布HTML报告。

如何将每个作业的内部版本号作为变量获取,以便在获取HTML报告时使用?

修改

这就是我的并行代码:

parallel (
  { uarr = build("Baseline - Secure - UARR", param1: build.properties.get("number")) },
  { login = build("Baseline - Secure - Login", param2: build.properties.get("number")) }
)

这是我在使用“发布HTML”报告进行索引页面时尝试使用的内容,但它没有看到$ {param1}作为变量并尝试按字面意义找到它:

*Secure Baseline*Secure_UARR-${param1}.html

这就是我在Maven构建作业中使用的内容,它可以很好地查找包含内部版本号的正确文件名的报告:

*Secure Baseline*Secure_UARR-${BUILD_NUMBER}.html

问题是,如果我在Build Flow并行作业中使用相同的逻辑,它将使用该作业的内部版本号,而不是创建报告的Maven作业。 (我希望这是有道理的)

1 个答案:

答案 0 :(得分:0)

您可以将作业参考存储在变量

parallel(
 job1: { def n = build("JOB_NAME", PARAM_1: "value-1", PARAM_2: true, ...) }
...
)

如果你愿意,甚至可以将它们存储在一个数组中

def jobs = [:]

parallel(
    job1: { 
      def n1 = build("job1", param1: "value1", ...) 
      jobs["job1"] = n1.number
    },
    job1: { 
      def n2 = build("job2", param1: "value1", ...) 
      jobs["job2"] = n2.number
    },
    job1: { 
      def n3 = build("job3", param1: "value1", ...) 
      jobs["job3"] = n3.number
    },
    jobm: { 
      def nm = build("jobm", param1: "value1", ...) 
      jobs["jobm"] = n1.number
    }
)

然后你可以在想要的时候阅读地图

以下answer显示了如何将其导出为环境变量。

def buildEnv = build.getEnvVars();
buildEnv.putAll(jobs) 
import org.jenkinsci.plugins.envinject.EnvInjectPluginAction
def envInjectAction = build.getAction(EnvInjectPluginAction.class);
envInjectAction.overrideAll(buildEnv)

您可以在$job1$job2,...,$jobm作为后期制作步骤使用它。

resolved bug表示您可以在HTML-publisher plugin中使用它(我不熟悉插件)