Jenkins - 将更新的修订版传递给下游工作

时间:2013-09-05 11:31:55

标签: svn jenkins

我们已将构建系统从CruiseControl迁移到jenkins以获得多平台产品。这是一个单一的整体工作:
 1.检查变化
 2.更新属性文件中的产品版本号
 3.将文件提交到subversion
 4.将svn修订号传递给其他平台进行本地结账(业绩原因)
 5. build(C ++,Java)
 6.测试

在Jenkins中,我们将构建和测试拆分为2个作业,构建触发测试。所有平台构建都必须成功运行测试。无论平台B上的构建失败如何,我都希望在平台A上运行测试,但这是一个不同的问题。

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

我们尝试过参数化触发插件,可以传递SVN_REVISION - 时间作业开始时的修订,但不会传递带有内部版本号的修改文件的修订版。我们在其他情况下使用参数化触发器,它可以满足我们的需要。

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

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

5 个答案:

答案 0 :(得分:7)

感谢此帖和以下评论: 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或任何其他内容
  10. 现在它是一个环境变量,要访问它,您只需要%SVN_REV%
  11. 在构建步骤中,您可以编写echo%SVN_REV%并显示SVN_REVISION。
  12. 简而言之(必须在BOTH作业中指定参数) JOB_1 => SVN_REV = $ {SVN_REVISION}

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

答案 1 :(得分:1)

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

  • (1)主要工作:检查源,更新内部版本号,使工作区克隆
  • (2)平台1:使用#1的克隆,为平台1构建,为测试平台1制作工作区克隆
  • (3)平台2:使用#1中的克隆,为平台2构建,为测试平台2制作工作区克隆
  • (4)测试平台1:使用#2
  • 中的克隆
  • (5)测试平台2:使用#3
  • 中的克隆

答案 2 :(得分:1)

我们遇到了类似的问题,我们想在奴隶机器上调用作业并传递master正在使用的SVN版本,以下是我们如何解决这个问题:

1)使用预定义参数说MASTER_SVN_REVISION调用子作业并为其赋值SVN_REVISION enter image description here

2)现在在您在步骤1中调用的作业中,使用以下机制来使用MASTER_SVN_REVISION的值

enter image description here

答案 3 :(得分:0)

参数化触发器插件中的一个源选项是:​​

  • 从触发构建的工作空间读取的属性文件中的属性

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

答案 4 :(得分:0)

在您的构建步骤中,您可以编写echo %SVN_REV%并显示它   SVN_REVISION。简而言之(必须在BOTH作业中指定参数)

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

使用${SVN_REV }进行访问。它对我有用。