2014-09-19 111 views
4
共享变量

我使用詹金斯测试/建造的目的,所以我创建了这个配置的多椎项目:詹金斯:在多椎

  1. 测试工作
  2. 构建工作
  3. 安装工作

MultiJob从Master Jenkins启动,但其他作业从其他节点启动。 构建作业执行一个创建BUILD_ID的shell脚本。 现在,我想将BUILD_ID作为参数传递给安装作业。 我该怎么做?我唯一的选择是使用属性文件?

非常感谢

回答

3

要使用我要描述的建议,您将需要Parameterized Trigger插件。将自定义参数传递到下游作业的一种方法是将密钥对(key=value)存储在文件中,并在调用下游(本例中为作业B)作业时通过选择Parameters from properties file选项指定相同的文件。请参阅下面的截图:

enter image description here

现在,您可以通过使用$BUILD_ID访问下游的工作“B”的变量。您还想启用选项Don't trigger if any files are missing

+4

我看到这是被接受的答案,它真的回答了这个问题吗?我和@Ligio具有完全相同的情况,它是一个** MultiJob **,需要将参数从_build_传递到_deploy_作业。值来自_build_作业,但_deploy_作业**不是_build_作业的下游**作业。它们按顺序运行,但是作为父代** MultiJob **的阶段。而且,它们运行在不同的奴隶机器上。我看不出这个解决方案如何工作。任何提示将不胜感激。 [看起来像。](https://s21.postimg.org/x82wux0qv/multijob.png) – topr 2016-08-26 10:42:39

+1

@topr我也有同样的问题。任何进展或解决方法? – polavishnu 2016-11-25 08:03:33

+0

@polavishnu是的,每个阶段的作业都有多个作业级别添加的env变量。对于问题中的情况,只需将BUILD_JOB_BUILD_ID(或BUILD_JOB_BUILD_NUMBER,不记得确切)环境变量的值传递给安装作业就足够了。 – topr 2016-12-06 18:36:35

1

首先,你需要添加到“安装工作”被称为“BUILD_ID”,然后一旦你的构建工作完成后,你可以在“触发参数化的基础上对其他项目”,并添加一个字符串参数未来建设作为BUILDID =%BuildID%

有关在詹金斯paramterized工作的详细信息请阅读以下链接的参数: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build

,你可能需要安装一个插件为。上面的链接。

1

您可以在多作业阶段通过使用预定义参数选项来传递参数BUILD_ID

步骤如下:

  • 进入配置页面,通过点击您的多椎的配置链接
  • 点击高级按钮,你要传递的参数工作的;
  • 点击添加参数,请选择Predefined parameters。然后创建一个您自己选择的参数名称,并将它分配给它BUILD_ID;
  • 通过在下游作业中启用This build is parameterized option来创建相同的参数,您想要接收定义的参数。然后,您可以在脚本中使用相同的代码
3

问题问如何在作业之间为MultiJob项目传递值,而不是参数化触发器。参数化触发器可能不是一个好的解决方案,因为下游作业将在MultiJob父级范围之外执行。传递变量多椎子作业之间,

  1. 写变量属性文件中的第一子作业
  2. “存档文物”为生成后的行动在第一子作业
  3. 之间第一个和第二个子作业,插入一个“从其他项目复制人工制品”的版本。将项目名称设置为您的第一个子作业的名称以及将哪个构建版本设置为“由当前MultiJob构建触发的构建”。在“要复制的工件”中添加您的属性文件。
  4. 在您的第二个子作业中,在“高级...”下,从属性文件添加参数 - >参数,并在那里输入您的属性文件名。你的第二阶段现在会有你的第一阶段通过的变量。