【发布时间】:2016-05-03 08:40:06
【问题描述】:
我们目前正在将 Jenkins 用于 CI。 我选择了 Jenkins,因为我们在许多不同的平台(linux、windows、嵌入式系统)上部署了许多程序。这对我们有很大帮助,但我们很难正确管理程序版本号。 一些开发人员使用他们自己的符号,我希望将所有内容标准化...
我考虑了两个基本版本号:
#define MAJOR 1
#define MINOR 0
我想增加两个额外的数字,比如:
#define BUILD_NUMBER 66
#define SVN_REVISION 77
但我遇到了问题:
首先,例如程序 FooServer 依赖于 X 库(我们开发的),每个库主干可能有不同的 SVN 版本。 那么,如果应该包含一个 SVN 修订号,使用 FooServer 修订号或项目 SVN url(程序 + 依赖项)的最高 SVN 修订号是否更相关?
其次,我考虑使用 Jenkins BuildNumber 变量将程序与 Jenkins 中的(存档)作业链接起来。我只是想知道它是否真的足够相关。
此外,我需要在版本字符串中添加一个信息,以区分夜间快照构建(不是开发人员构建)和在生产中部署的版本。 也许通过添加附加信息?
最后,这些#define 当然会存储在构建时生成的 cpp 头文件中,并且永远不会提交到 repo。为了防止开发人员从他们的工作站构建发布(我们遇到了太多这样的问题)。
在 SVN repo 上,头文件仍处于开发阶段:
#define MAJOR 1
#define MINOR 0
#define BUILD_NUMBER X
#define SVN_REVISION dev
嗯,欢迎您的体验。我们团队的开发人员不希望有太多的约束,但另一方面我需要建立一些符号规则以提高鲁棒性。
【问题讨论】:
-
关于您的第一个问题:是否所有程序和 lib 代码都驻留在同一个存储库中?
-
大部分,是的。有一些例外,但我们目前正在将它们迁移到同一个 repo 中。
-
如果所有代码都在同一个存储库中,那么最高修订号就足够了。至少在过去的几年里对我来说已经足够了:-)
标签: c++ svn jenkins versioning