Continuous integration Jenkins-在作业之间传递变量?

Continuous integration Jenkins-在作业之间传递变量?,continuous-integration,hudson,jenkins,Continuous Integration,Hudson,Jenkins,我在jenkins有两份工作,都需要相同的参数 如何使用参数运行第一个作业,以便在触发第二个作业时使用相同的参数?您可以使用它将参数从一个任务传递到另一个任务 您还需要添加从上游传递到下游的此参数。您可以使用此操作 准备中的第一份工作 正在进行的第二项工作 (适用于谷歌同行) 若您正在使用构建一个重要的管道,则可以使用DSL在作业之间传递参数,如下所示: 假设一个可用的字符串参数“CVS_TAG”,以便将其传递给其他作业: build("pipeline_begin", CVS_TAG: pa

我在jenkins有两份工作,都需要相同的参数

如何使用参数运行第一个作业,以便在触发第二个作业时使用相同的参数?

您可以使用它将参数从一个任务传递到另一个任务

您还需要添加从上游传递到下游的此参数。

您可以使用此操作

准备中的第一份工作

正在进行的第二项工作

(适用于谷歌同行)

若您正在使用构建一个重要的管道,则可以使用DSL在作业之间传递参数,如下所示:

假设一个可用的字符串参数“CVS_TAG”,以便将其传递给其他作业:

build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
   // will be scheduled in parallel.
   { build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
   { build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])
显示可用变量/参数的提示:

// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'

1.生成后操作>选择“在其他项目上触发参数化生成”

2.输入带值的环境变量。值也可以是Jenkins构建参数

具体步骤如下:-

希望能有所帮助:)

此处不适用于我的用例。我需要能够在一个作业中动态创建参数,并将它们传递到另一个作业中。如前所述,似乎无法将变量从shell构建步骤导出到构建后操作


我通过将值写入文件并使用该文件作为参数,通过“添加生成后操作”->“触发参数化生成…”导入,然后选择“添加参数”->“属性文件中的参数”,实现了一种解决方法。

只需在Nigel Kirby的答案之外添加我的答案,因为我还不能发表评论:

为了传递一个动态创建的参数,您还可以在“Execute Shell”磁贴中导出变量,然后通过“Trigger parameterized build on other Project”=>“Predefined parameters”=>give“YOUR_VAR=$YOUR_VAR”。我的团队使用此功能将npm包版本从构建作业传递到部署作业


更新:以上仅适用于Jenkins注入的参数,从shell创建的参数仍然需要使用相同的方法。例如,echo YOUR_VAR=${YOUR_VAR}>variable.properties并将该文件传递到下游

我认为上面的答案需要一些更新:

我试图创建一个动态目录来存储我的上游构建工件,因此我想将我的上游作业构建编号传递给下游作业。我尝试了上述步骤,但无法使其工作。下面是它的工作方式:

  • 我使用复制工件插件从当前工作中复制了工件
  • 在上游作业的构建后操作中,我添加了变量“SOURCE_build_NUMBER=${build_NUMBER}”,并将其配置为触发下游作业
  • 除了我的下游作业无法获取$SOURCE\u BUILD\u NUMBER来创建目录外,其他一切都正常工作
  • 所以我发现要使用这个变量,我必须在下游作业中将同一个变量定义为参数变量,如下图所示:

  • 这是因为jenkins的新版本要求您在下游作业中也定义变量。我希望这会有所帮助。

    通读这些答案,我看不到其他我喜欢的选项也会提供它。我喜欢作业的参数化,但它的伸缩性并不总是很好。如果您的作业不是直接定义的第一个作业的ownstream,但在管道的更深处,您并不希望参数化管道中的每个作业,以便能够始终传递参数。或者,如果您有大量参数用于各种其他作业(尤其是那些不一定与父作业或主作业绑定的作业),参数化同样不起作用


    在这些情况下,我倾向于将值输出到属性文件,然后使用插件将其注入到我需要的任何作业中。这可以动态完成,这是从上面的另一个答案中解决问题的另一种方法,该答案仍然使用参数化作业。这种解决方案在许多情况下都可以很好地扩展。

    我也面临同样的问题当我必须将pom版本传递给下游Rundeck作业时出现的问题

    我所做的是通过属性文件使用参数注入,例如:

    1) 通过shell在属性文件中创建属性:

    构建操作:

    • 执行shell脚本
    • 注入环境变量
    例如:

    2) 将定义的属性传递给下游作业: 生成后操作:

    • 在其他项目上触发参数化生成
    • 添加参数:当前生成参数
    • 添加参数:预定义参数
    例如:

    3) 然后就可以在下游Rundeck作业中使用$POM_版本

    /!\Jenkins版本:1.636

    /!\n由于某些原因,在创建触发的生成时,必须添加选项“Current build parameters”以传递属性。

    我找到了答案

    经过将近两个小时的反复试验,我终于找到了答案

    这是将变量传递给远程作业的工作方式:

        def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2=${env.param2}")
    
    使用\n分隔两个参数,不带空格

    相对于 参数:“”“someparams”

    我们使用 参数:“someparams”

    “。。。是获取所需变量值的方法。(这些是双引号,而不是两个单引号)

    “”或“…”将无法获取这些值。(三个单引号或仅单引号)

    此处的所有参数都是在管道开始处的环境{}块中定义的,并在必要时在阶段>步骤>脚本中进行修改

    我还测试并发现当你使用“。。。“您不能使用诸如”“或”“之类的内容。”。。。“或者它的任何组合

    这里的问题是,当您在参数部分中使用“…”时,无法传递字符串参数;例如,这将不起作用:

        def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2='param2'")
    
    如果您想通过类似上面的内容,您需要设置一个environm