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

Doo*_*Dah 5 svn jenkins

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

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

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

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

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

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

小智 8

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

以下是对我有用的答案:

  1. 获取参数化触发器插件(如何安装:管理Jenkins->管理插件 - >可用并检查"参数化触发器插件"并安装,注意我还安装了"环境注入器插件",这可能也是必要的)
  2. 转到JOB_1并添加Post-Build操作(在其他项目上触发参数化构建)
  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.

简而言之(必须在BOTH作业中指定参数)JOB_1 => SVN_REV = $ {SVN_REVISION}

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


jwe*_*rny 1

我认为克隆工作区插件非常适合您。它允许您克隆工作区,以便其他作业可以使用它。使用这个,我可以像这样配置我的工作。

  • (1) Master Job:检查源代码、更新内部版本号、克隆工作空间
  • (2) 平台 1:使用来自 #1 的克隆,为平台 1 构建,为测试平台 1 制作工作区克隆
  • (3) 平台 2:使用来自 #1 的克隆,为平台 2 构建,制作工作区克隆以测试平台 2
  • (4) 测试平台 1:使用来自 #2 的克隆
  • (5) 测试平台 2:使用来自 #3 的克隆