当前位置: 首页 > 面试题库 >

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

何德寿
2023-03-14
问题内容

TL; DR:显然,在Jenkins管道作业中,您可以轻松地向下游传递参数。我想知道的是,是否可以将它们传递给 上游

用例:

我们有三份工作;job_onejob_twojob_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?我不能以这种方式设置系统,原因有两个:

  1. job_two需要能够在不触发job_three的情况下运行,并且3并不一定总是需要2的输入才能运行。
  2. 我辩论过要让伞从两个开始,然后有两个从句,只有在伞开始的情况下才触发三个子句,但据我所知,这将限制伞工作中的反馈。您不会知道两个失败是因为两个失败还是三个(作为两个部分的一部分)失败了。如果我对此假设有误,请告诉我。

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

伞是一种用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"


 类似资料:
  • 问题内容: 我正在使用具有集成交付管道功能(https://jenkins.io/solutions/pipeline/)的Jenkins v2.1 来编排两个现有构建(构建和部署)。 在我的参数化构建中,我有3个用户参数设置,也需要在管道中选择该参数。 管道脚本如下: 除以外,此方法均正常运行。当我构建管道时,会引发以下错误: 如何解决此类型转换错误?甚至更好的是,有没有一种麻烦的方式可以将所有

  • 问题内容: 我有一个名为 buildall 的管道作业,如下所示: 该 buildall 作业有25个参数。我想将所有 buildall 的参数传递给 job1 。有没有一种简单的方法可以代替手动指定每个参数呢? 在此问题中:向下游作业传递管道参数是一个子问题,但从未得到回答: 甚至更好的是,有没有一种麻烦的方法可以将所有管道参数传递给下游作业。 我有同样的问题。 问题答案: 以下似乎有效(尽管我

  • 我使用的是Jenkins v2.1,它具有集成交付管道功能(https://jenkins.io/solutions/pipeline/)协调两个现有构建(构建和部署)。 在我的参数化构建中,我有3个用户参数设置,这些参数也需要在管道中选择。 管道脚本如下所示: 除了之外,这可以正常工作。当我构建管道时,会抛出以下错误: 如何解决此类型转换错误?或者更好的是,是否有一种不那么麻烦的方法,可以将所有

  • 问题内容: 当前,我有一个具有不同参数的管道作业,其中此参数之一是Choice参数。这是该作业参数的config.xml输出: 现在,我可以通过传递字符串参数从管道调用此作业: 但是我无法为选择参数定义参数: 我尝试了以下方法: 但这失败并显示以下错误: 因此问题是:如何在调用其他管道作业时定义选择参数: 有人有这样的例子吗? 问题答案: 我看过一个使用以下语法的工作示例: 基本上,不要以特殊的方

  • 问题内容: 我要完成的工作是从分支中签出代码,将其合并到分支,构建,运行测试,如果测试成功则推送到分支。 测试应在需要的单独工作中运行。 我当前的设置如下: Job 从中检出,将其合并并构建 作业会在“ 后期制作”步骤中 触发作业(需要预先创建) 如果成功,则在 发布构建操作中推送到分支 __ 我尝试使用 Copy Artifact Plugin, 但是问题在于,在 Post构建步骤中 触发时,我

  • 我有一个 Jenkins Job DSL 种子作业,它调用了几个管道作业,例如 job1.groovy和job2.groovy是标准的Jenkinsfile样式管道。 我想在这些作业中传递一些常用的地图。这些内容可能因环境而异,例如目标服务器、凭据名称。 类似于: 我可以在我的种子作业中定义一个映射,然后在我的管道作业中作为映射进行传递和访问吗?