jenkins – 在工作之间传递variables?
我在jenkins有两个工作,两者都需要相同的参数。
我如何使用参数运行第一个作业,以便在触发第二个作业时使用相同的参数?
您可以使用Parameterized Trigger Plugin ,它可以让您将参数从一个任务传递到另一个任务。
1.Post-生成操作>select“在其他项目上触发参数化生成”
2.用值input环境variables。值也可以是Jenkins Build Parameters。
详细的步骤可以在这里看到: –
希望这是有帮助的:)
这里接受的答案不适用于我的用例。 我需要能够在一个工作中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 YOUR_VAR = $ {YOUR_VAR}> variable.properties并将该文件传递给下游
我想上面的答案需要一些更新:
我试图创build一个dynamic目录来存储我的上游构build工件,所以我想通过我的上游工作生成号码下游工作我尝试了上述步骤,但无法使其工作。 这是如何工作的:
- 我使用复制工件插件复制了当前作业中的工件。
- 在上游作业的后期构build操作中,我添加了像“SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}”这样的variables,并将其configuration为触发下游作业。
- 一切工作,除了我的下游工作无法获得$ SOURCE_BUILD_NUMBER创build目录。
- 所以我发现要使用这个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在很多情况下都能很好地扩展