我们已将构建系统从 CruiseControl 移至 jenkins,以实现多平台产品。这是一个单一的整体工作:
1. 检查更改
2. 更新属性文件中的产品构建号
3. 提交文件到 subversion
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 脚本中使用的属性。还有其他依赖的项目,等我回办公室搭建沙箱试试(半天的工作)。
有人有任何建议或意见吗?