詹金斯 - 在工作之间传递变量?

Ste*_*all 79 continuous-integration hudson jenkins

我在詹金斯有两个工作,两个都需要相同的参数.

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

Łuk*_*nek 71

您可以使用参数化触发器插件,它允许您将参数从一个任务传递到另一个任务.

您还需要添加从下游传递的上游参数.

  • 这个答案是不够的 (17认同)
  • 您好抱歉听起来像菜鸟,但如果有人可以使用参数化触发插件的详细信息进行编辑,这是否可以? (9认同)
  • 旁注:看起来在bash脚本部分中创建的导出环境变量不符合输出参数中的替换条件(例如'export VERSION'不会使'UPSTREAM_VERSION = $ VERSION'获取正确的值;它只是获取'$ VERSION'代替). (8认同)
  • 我同意应该有一些如何将参数传递给目标作业的示例.当前的参数化触发器插件页面没有提供有关此信息的良好信息.例如,您可以在传递参数时使用哪种语法. (6认同)
  • 该插件似乎不再起作用了.参见[开放问题的长列表](https://issues.jenkins-ci.org/browse/JENKINS-36917?jql=project%20%3D%20JENKINS%20AND%20status%20in%20(Open%2C%) 20%22英寸%20Progress%22%2C%20Reopened)%20于是%20component%20%3D%20%27parameterized触发-插件%27).我不能再使用此插件传递任何参数值.还有其他方法吗? (2认同)

Vin*_*eph 31

1.Post-Build Actions>选择"在其他项目上触发参数化构建"

2.输入带有value的环境变量.值也可以是Jenkins Build Parameters.

详细步骤可以在这里看到: -

https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

希望它有用:)

  • 仅供参考,这个答案仍然需要插件. (7认同)

Nig*_*rby 23

这里接受的答案对我的用例不起作用.我需要能够在一个作业中动态创建参数并将它们传递给另一个作业.正如Mark McKenna所提到的那样,似乎没有办法将变量从shell构建步骤导出到post构建操作.

我通过将值写入文件并使用该文件作为参数通过"添加后构建操作" - >"触发器参数化构建..."然后选择"添加参数" - 来实现使用参数化触发器插件的变通方法- >'属性文件中的参数'.


小智 12

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

我试图创建一个动态目录来存储我的上游构建工件,所以我想将我的上游作业构建号传递给下游作业我尝试了上述步骤,但无法使其工作.以下是它的工作原理:

  1. 我使用复制工件插件从当前作业复制了工件.
  2. 在上游作业的后期构建操作中,我添加了类似"SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}"的变量,并将其配置为触发下游作业.
  3. 一切正常,但我的下游工作无法获得$ SOURCE_BUILD_NUMBER来创建目录.
  4. 所以我发现要使用这个变量我必须在下游作业中定义相同的变量作为参数变量,如下图所示:

在此输入图像描述

这是因为新版本的jenkins要求您在下游作业中定义变量.我希望它有用.


Off*_*rmo 10

(对于谷歌同行)

如果您使用Build Flow Plugin构建一个严重的管道,您可以使用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'])
Run Code Online (Sandbox Code Playgroud)

显示可用变量/参数的提示:

// 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 '------------------------------------'
Run Code Online (Sandbox Code Playgroud)


Sha*_*awn 7

除了Nigel Kirby之外,我只想添加我的答案,因为我还没有评论:

为了传递动态创建的参数,您还可以在"Execute Shell"磁贴中导出变量,然后将其传递给"其他项目上的触发器参数化构建"=>"预定义参数"=>给出"YOUR_VAR = $ YOUR_VAR".我的团队使用此功能将npm包版本从构建作业传递到部署作业

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