jenkins - 管道作业 - 向上游传递参数?

标签 jenkins groovy jenkins-pipeline

TL;DR:显然在 Jenkins 管道作业中,您可以轻松地向下游传递参数。我想知道的是你能不能通过他们上游 .

用例:

我们有三份工作; job_one , job_two , 和 job_three .这些通常单独运行,因为只需要一个阶段,但在越来越频繁的情况下,我们希望能够背靠背运行所有三个阶段。

第一个和第二个依赖于您可以提前定义的参数,但第三个需要从第二个作业生成的参数(在 job_two 运行之前其结构未知的文件名)。

我建了 umbrella ,它为每个作业调用如下内容。在这种情况下,PARAM1填充是因为雨伞作为“带参数构建”运行。

build job: 'job_one', parameters: [[$class: 'StringParameterValue', name: 'PARAM1', value: "$PARAM1"]]

一切顺利,然后我可以使用 PARAM1job_one正好。

问题:

对于 job_three我需要参数 filename .这是在 job_two 内生成的,因此据我所知是无法访问的,因为 job_three 不知道 job_two 在做什么。

在理想的世界中,我只会让 job_two 通过 filename到伞作业,这会将其反馈到 job_three。因此,我如何传递生成的 filename回到伞的工作?

我正在想象这样的最终脚本;
node('on-demand-t2small'){

    stage ('Build 1') {

        build job: 'job_one', parameters: [[$class: 'StringParameterValue', name: 'PARAM1', value: "$PARMA1"]]
}
    stage ('Build 2') {

        build job: 'job_two', parameters: [[$class: 'StringParameterValue', name: 'PARAM2', value: "$PARMA2"]]

    //somehow get the filename parameter out of job_two here so that I can move it to job three...
} 
    stage ('Build 3') {

        build job: 'job_three', parameters: [[$class: 'StringParameterValue', name: 'filename', value: "$filename"]]
} }

补充说明:

我认识到第一个问题是“为什么不让 job_two 触发 job_three?我不能以这种方式设置系统有两个原因;
  • job_two 需要能够在不触发 job_three 的情况下运行,并且三个不能总是需要两个输入才能运行。
  • 我曾讨论过让雨伞开始两个,然后在两个中设置一个条款,只有在雨伞启动时才会触发三个子句,但据我所知,这将限制雨伞工作中的反馈;你不会知道两个失败是因为两个失败,还是因为三个(作为两个的一部分)失败。如果我对这个假设有误,请告诉我。

  • 我曾考虑将参数设置为环境变量,但我相信这是特定于节点的,我不能保证两个作业都会在同一节点上运行,因此这似乎不是解决方案。

    Umbrella 是用 groovy 编写的流水线作业,其他三个可能是流水线作业或自由式作业,如果这很重要的话。

    如果可能,我希望得到详细的答案,我对 Groovy、Jenkins 和一般的编码仍然是新手。

    最佳答案

    应该就是这么简单:

    stage ('Build 3') {
            res = build job: 'job_three', parameters: [[$class: 'StringParameterValue', name: 'filename', value: "$filename"]]
            echo "$res.buildVariables.filename"
    }
    

    假设在 job_three 你做
    env.filename = "col new file name"
    

    关于jenkins - 管道作业 - 向上游传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513072/

    相关文章:

    tfs - 如何设置 TFS2010 以使用 Jenkins 构建服务器

    java - 获取两天之间的差值(减法)

    java - 如何在 java/groovy 中模拟方法?

    java - 用于生成 Groovy 源文件的 Java/Groovy API

    docker - Jenkins 工作区中的@tmp 文件夹是什么以及如何清理它们

    jenkins - 将多个 json 结果合并到一份更新的 Cucumber-JVM 报告中

    jenkins - 在 Jenkins 中禁用和启用作业

    jenkins - 如何在 Jenkins Pipeline 脚本中使用 "Parameterized Remote Trigger Plugin"?

    Jenkins 多分支管道不安排标记作业

    java - Jenkins 显示 log4j 提示 : log4j:WARN No appenders could be found for logger