2013-09-05 90 views
3

我们已经将构建系统从CruiseControl移至jenkins以获得多平台产品。这是一个单一的整体工作:
1.检查更改
在性能 2.更新产品版本号文件
3.提交文件,以颠覆
4.通过SVN版本号到其他平台的本地结帐(性能原因)
5.构建(C++,Java)来
6.测试Jenkins - 将更新后的修订版传递给下游作业

在詹金斯,我们构建和测试分成2点的作业,建立触发测试。所有平台构建必须成功才能运行测试。我想让平台A上的测试运行,而不管平台B上的构建失败,但这是一个不同的问题。

我现在要解决的问题是构建阶段。当Jenkins开始时,它在开始工作时知道存储库的SVN_REVISION。我们在作业期间编译前增加构建编号,这是我们需要传递给下游作业的svn修订版本。我们需要确保在所有平台上检出相同的修订版,并且测试作业也检出相同的修订版。编译需要2-3个小时并测试大约7个小时,所以在构建过程中发生的一些新的提交已经足够正常,这些提交将包含在测试工作中。由于结账速度不同,我们在建立阶段也有提交,这些提交包含在一个平台中,但不包含在其他平台中。

我们已经尝试过参数化触发器插件,它可以通过SVN_REVISION - 修订时间作业开始,但没有通过版本号修改后的文件修订版。在其他情况下,我们使用参数化触发器,它可以满足我们的需求。

我正在考虑将svn修订号添加到属性文件中。我可以从其他作业的属性文件中读取修订,假设文件没有被更改,这可能是有风险的。 svn使用':'分隔属性,IIRC,其他属性使用key = value的'=',因为我们还读取了shell脚本中要使用的属性。还有其他的依赖项目,所以我会在我回到办公室并设置一个沙箱(半天的工作)时尝试这个。

任何人有任何建议或意见?

回答

1

我认为Clone Workspace Plugin会适合你。它允许您克隆工作空间,以便其他作业可以使用它。使用这个,我会像这样配置我的工作。

  • (1)主作业:退房源,更新的版本号,让工作空间克隆
  • (2)平台1:#1使用克隆,构建平台1,使工作区克隆进行测试平台1
  • (3)平台2:从#1使用克隆,构建平台2,使工作区克隆用于测试平台2
  • (4)测试对于平台1:使用克隆从#2
  • (5 )平台2的测试:使用来自#3的克隆
0

一个在参数触发插件的源选项是:​​从性能

  • 性文件从触发的工作区读打造

如果在原始的工作区创建此不将其检入,在下游作业被触发之前,您不会有任何更改风险。

+0

我会研究这一点。然而,我确实需要检查这个属性文件,因为这个项目的构建和测试以及其他项目都使用它。 –

1

我们碰到了,我们要呼吁从机工作,并通过其掌握使用SVN版本的类似问题,以下是我们如何解决这个问题:

1)调用与预定义参数在子作业说MASTER_SVN_REVISION和现在分配给它的SVN_REVISION enter image description here

2值),其中在步骤1中援引的工作,使用下面的机制来使用MASTER_SVN_REVISION

enter image description here

的值
5

感谢这篇文章,下面的评论: https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

这里是为我工作的回答:

  1. 获取参数触发插件(如何安装:管理Jenkins->管理插件 - >提供并检查“参数化触发插件”并安装,注意我还安装了“环境注射器插件”,这可能也有必要)
  2. 转到JOB_1并添加生成后操作(触发器参数化生成其他项目)
  3. 类型的项目,以建立JOB_2
  4. 添加参数(预定义的参数)
  5. 类型的参数框中键入以下内容:SVN_REV = $ {SVN_REVISION}
  6. 应用和保存
  7. 最重要的是:您必须添加此参数(SVN_REV)到JOB_2
  8. 转到并选中“此版本是参数化”,并增加了“字符串参数”
  9. 类型“SVN_REV”(必须是相同的名称),并把以1:2的默认值或任何
  10. 现在是一个环境ronment变量,要访问它,只需要%SVN_REV%
  11. 在构建步骤中,您可以编写echo%SVN_REV%,它将显示SVN_REVISION。

在短(参数必须在两个作业指定) JOB_1 => SVN_REV = $ {SVN_REVISION}

JOB_2 =>添加SVN_REV作为字符串参数,访问类型%SVN_REV%

+0

这应该是正确的答案。工作正常。只需使用echo SVN_REV而不是%echo SVN_REV% – Struct

0

在您的构建步骤中,您可以编写echo %SVN_REV%,它将显示 SVN_REVISION。在短(参数必须在两个工作指定)

JOB_1 => SVN_REV=${SVN_REVISION} 
JOB_2 => Add SVN_REV as a String Parameter, to access type %SVN_REV% 

使用${SVN_REV }访问。它为我工作。

相关问题