jenkins – 在工作之间传递variables?

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

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

您可以使用Parameterized Trigger Plugin ,它可以让您将参数从一个任务传递到另一个任务。

1.Post-生成操作>select“在其他项目上触发参数化生成”

2.用值input环境variables。值也可以是Jenkins Build Parameters。

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

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

希望这是有帮助的:)

这里接受的答案不适用于我的用例。 我需要能够在一个工作中dynamic创build参数并将其传递到另一个工作中。 正如Mark McKenna所提到的那样,似乎没有办法将一个variables从shell构build步骤导出到构build后行为。

我使用参数化触发器插件实现了一个解决方法,通过将值写入文件并使用该文件作为参数,通过“添加后构build动作” – >“触发器参数化的构build…”,然后select“添加参数” >'来自属性文件的参数'。

(对于谷歌同行)

如果您正在使用Build Flow插件构build严重的stream水线,则可以使用DSL像这样在作业之间传递参数:

假设一个可用的string参数“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']) 

提示显示可用的variables/参数:

 // 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 '------------------------------------' 

除了奈杰尔·柯比(Nigel Kirby)之外,我还不能评论:

为了传递一个dynamic创build的参数,你也可以在'Execute Shell'中导出variables,然后通过'Trigger parameterized build on other projects'=>'Predefined parameters“=>给出'YOUR_VAR = $ YOUR_VAR'。我的团队使用此function将npm包版本从构build作业传递到部署作业

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

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

我试图创build一个dynamic目录来存储我的上游构build工件,所以我想通过我的上游工作生成号码下游工作我尝试了上述步骤,但无法使其工作。 这是如何工作的:

  1. 我使用复制工件插件复制了当前作业中的工件。
  2. 在上游作业的后期构build操作中,我添加了像“SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}”这样的variables,并将其configuration为触发下游作业。
  3. 一切工作,除了我的下游工作无法获得$ SOURCE_BUILD_NUMBER创build目录。
  4. 所以我发现要使用这个variables,我必须在下游工作中定义相同的variables作为参数variables,如下图所示:

在这里输入图像说明

这是因为新版本的jenkins需要你在下游工作中定义variables。 我希望这是有帮助的。

你可以使用Hudson Groovy builder来做到这一点。

第一份工作正在筹备中

在这里输入图像说明

第二份工作正在进行中

在这里输入图像说明

当我必须将一个pom版本传递给下游的Rundeck作业时,我遇到了同样的问题。

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

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

构build操作:

  • 执行一个shell脚本
  • 注入环境variables

例如: 属性定义

2)将定义的属性传递给下游作业:发布构build操作:

  • 触发其他项目的参数化构build
  • 添加参数:当前构build参数
  • 添加参数:预定义的参数

例如: 属性发送

3)然后可以在下游的Rundeck作业中使用$ POM_VERSION。

/!\ Jenkins版本:1.636

/!\由于某些原因,在创build触发构build时,需要添加“当前构build参数”选项来传递属性。

通过阅读答案,我没有看到我喜欢的另一个选项也会提供。 我喜欢工作的参数化,但并不总是很好。 如果您的工作不是直接在第一份工作的下游,而是在工作的下游,那么您并不是真的想要将参与工作的所有工作都参数化,以便能够一直传递参数。 或者,如果您有大量其他作业使用的参数(特别是那些不一定与一个父作业或主作业相关的参数),则参数化不起作用。

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

在这篇文章中看到我的答案:

为我工作(必须在两个作业中指定参数,而不仅仅是父作业)

https://stackoverflow.com/a/40348900/2010136