从 Jenkins 中的另一个作业获取内部版本号作为变量



>我正在运行一个构建流作业,该作业并行执行多个构建,然后使用构建后操作发布 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

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

您可以将作业引用存储在变量中

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
    }
)

然后你可以在需要时阅读地图

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

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

这个已解决的错误表明您可以在HTML发布者插件中使用它(我对插件并不熟悉)

最新更新