我们已将构建系统从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脚本中使用的属性。还有其他依赖项目,所以当我回到办公室并设置一个沙箱(半天的工作)时,我会尝试这个。
任何人都有任何建议或意见吗?
答案 0 :(得分:7)
以下是对我有用的答案:
简而言之(必须在BOTH作业中指定参数) JOB_1 => SVN_REV = $ {SVN_REVISION}
JOB_2 =>添加SVN_REV作为字符串参数,以访问类型%SVN_REV%
答案 1 :(得分:1)
我认为Clone Workspace Plugin对您有用。它允许您克隆工作空间,以便其他作业可以使用它。使用这个,我会为我的工作配置这样的东西。
答案 2 :(得分:1)
我们遇到了类似的问题,我们想在奴隶机器上调用作业并传递master正在使用的SVN版本,以下是我们如何解决这个问题:
1)使用预定义参数说MASTER_SVN_REVISION调用子作业并为其赋值SVN_REVISION
2)现在在您在步骤1中调用的作业中,使用以下机制来使用MASTER_SVN_REVISION的值
答案 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 }
进行访问。它对我有用。