简短的回答使用时间戳或手动设置版本代码,在不需要时将内容远离 CI 服务器。或者强制詹金斯构建数字。
长答案我喜欢詹金斯负责自动化也可以自己工作的东西。因此,如果我不需要 jenkins 进行设置,我也很高兴。
此外,如果您使用 2 个分支,您可能会以随机顺序提交给它们。试图以某种方式将工作联系在一起似乎是不必要的麻烦,以后可能会成为问题。例如,如果现在构建了 2.0 版并进行了 QA,只是等待适当的发布日期和营销团队完成其工作,但之后您需要发布 v1.1.1 快速修复程序怎么办?根据您选择的解决方案,您可能需要触发一些重建来强制版本代码碰撞。新版本,新质量保证?
您对 versionCode 的真正要求是它高于以前的版本。
来自http://developer.android.com/guide/topics/manifest/manifest-element.html
android:versionCode 内部版本号。
此数字仅用于确定一个版本是否比另一个版本更新,数字越大表示版本越新。这不是向用户显示的版本号;该数字由 versionName 属性设置。该值必须设置为整数,例如“100”。您可以根据需要定义它,只要每个后续版本都有一个更高的数字。例如,它可以是内部版本号。或者,您可以通过分别在低 16 位和高 16 位中对“x”和“y”进行编码,将“xy”格式的版本号转换为整数。或者您可以在每次发布新版本时简单地将数字增加一。
所以这里有2个解决方案:
手动碰撞。在我们的项目中,我使用一些 sed 脚本在发布前自动调整内部版本号。由于我还需要手动更改一些内容,例如 versionName 前缀、开发期间禁用/启用调试模式等,我手动运行了一个 bumpversion 脚本,以便我的分支中的下一个构建具有适当的版本和 versionCode 编号。注意我在 versionName 中使用 jenkins 内部版本号。如果您为 v2 选择了足够大的版本代码凹凸,此解决方案可防止您在 v2 准备好后出现 1.1.1 需要退出的问题。
另一个更自动化但仍然简单的解决方案是使用时间戳之外的东西。YYMMDDHHSS 格式对于整数 (< 2^31) 来说已经足够好了,而且很可能您接下来要发布的任何版本都将在前一个版本之后而不是在同一分钟内准备好。所以基本上当你构建 v1.1 时,它会得到例如 1308131600,如果你在它得到 1308131601 后的一分钟构建 v1.2。(这显然不能帮助你对抗 v1.1.1/v2 场景)
以下是在 Android 应用程序中生成/更新 versionCode 自动递增版本代码的脚本的一些想法。
詹金斯之路
现在,如果您仍然希望 jenkins 负责,一个简单的解决方案是使用https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin之类的东西,并将您的每个分支作业配置为有一个大足够的前缀以确保没有冲突。设置仍然非常简单。
例如
- 110000 用于分支 1.1
- 120000 用于分支 1.2