8

我们目前正在开发一个具有多个并行开发流的应用程序。我们有一个 Jenkins 工作来构建每个流/发布。所以 Job-A 可能正在构建 1.1 版,而 Job-B 可能正在构建 1.2 版。

我认为最好在每个版本之间共享内部版本号,这样如果 Job-A 以内部版本号 125 运行,如果 Job-B 下一个运行,它将以内部版本号 126 运行。我认为这是最好的原因策略是这是一个 Android 应用程序,每次提交到 Google Play 时,它的 versionCode 参数都需要递增。我们使用 Jenkins 内部版本号作为 versionCode 值。

有什么方法可以配置 Jenkins 以在多个作业之间共享内部版本号?或者,有没有人想出更好的解决方案来解决这个问题?

4

3 回答 3

6

简短的回答使用时间戳或手动设置版本代码,在不需要时将内容远离 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
于 2013-08-12T22:36:55.423 回答
0

您可以查看多作业插件,您可以在其中将多个参数化作业添加到包含作业中

https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin

您还可以查看工件存档 将工件存档在 hudson/jenkins 中,然后稍后再提取文件

于 2013-08-12T20:24:08.410 回答
0

我还没有尝试过,但我正在考虑继续构建机器并在每个作业nextBuildNumber中用符号链接替换文件到某个地方的单个文件。什么可能出错。好吧,并发访问可能是一个问题。如果 Jenkins 从头开始​​重新创建文件,即使用删除和创建,而不是像往常一样打开它,则可能会出现问题。

于 2018-02-26T20:28:10.717 回答