Jenkins如何在不同任务之间共享构建编号?

8
我们目前正在开发一款具有多个并行开发流的应用程序。我们有一个Jenkins工作任务来构建每个流/版本。因此,Job-A可能正在构建版本1.1,而Job-B可能正在构建版本1.2。
我认为最好是在每个版本之间共享构建编号,这样如果Job-A使用构建编号125运行,那么下一个运行的Job-B将使用构建编号126。我认为这是最佳策略的原因是,这是一个Android应用程序,需要在每次提交到Google Play时增加其versionCode参数。我们使用Jenkins构建编号作为versionCode值。
有没有办法配置Jenkins在多个任务之间共享构建编号?或者,有没有人提出了更好的解决方案来解决这个问题?

1
如何说服Jenkins为多个任务共享构建编号? - dnozay
3个回答

6

简短回答 使用时间戳或手动设置versionCodes,在不必要时使内容远离CI服务器。或者强制使用Jenkins构建编号。

详细回答 我喜欢让Jenkins自动化处理一些可以自行完成的事情。因此,如果我不需要Jenkins进行设置,我也很高兴。

此外,如果您使用2个分支,那么您可能会以随机的顺序提交它们。试图在某些方面将任务联系在一起似乎是一个不必要的麻烦,这可能会在以后成为问题。例如,如果现在已经构建并通过了QA测试版本2.0,并且只等待适当的发布日期和市场部门完成其工作,但之后您需要发布v1.1.1的快速修复程序?根据您选择的解决方案,您可能需要触发一些重新构建来强制进行versionCode增加。新的构建,新的QA测试?

您对versionCode的真正要求是它比先前的版本高。

来自http://developer.android.com/guide/topics/manifest/manifest-element.html

android:versionCode 内部版本号。

此数字仅用于确定一个版本是否比另一个版本更近,较高的数字表示更新的版本。这不是向用户显示的版本号;该数字由versionName属性设置。该值必须设置为整数,例如"100"。您可以按任意方式定义它,只要每个连续版本都有更高的数字即可。例如,它可以是构建号。或者,您可以通过在低16位和高16位中分别编码“x”和“y”来将“x.y”格式的版本号转换为整数。或者,您可以每次发布新版本时增加一个数字。

因此,这里有两个解决方案:

  • 手动提升版本号。在我们的项目中,我使用一些sed脚本来自动化在发布之前提升构建编号。由于我还需要手动更改一些东西,比如versionName前缀,开发过程中禁用/启用调试模式等等,所以我手动运行一个bumpversion脚本,以便我的分支中的下一个构建有适当的版本和versionCode号码。请注意,我将jenkins构建编号用于versionName。如果您为v2选择了足够大的versionCode增量,则此解决方案可以防止出现1.1.1需要在v2准备就绪后才能发布的问题。

  • 另一个更自动化但仍然简单的解决方案是使用时间戳。YYMMDDHHSS格式已经足够好的整数(<2 ^ 31),并且您要发布的任何版本都有很大可能是在上一个版本之后准备好的,而不是在同一分钟内准备好的。因此,当您构建v1.1时,它获得e.g. 1308131600,并且如果您在一分钟后构建v1.2,则它获得1308131601。(显然,这不能帮助您抵御v1.1.1 / v2情况)

以下是生成/更新versionCode的脚本的一些想法在Android应用中自动递增版本代码

Jenkins方式

现在,如果您仍然希望使用Jenkins控制,一个简单的解决方案是使用类似于https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin的工具,并将每个分支的作业配置为具有足够大的前缀以确保没有冲突。安装仍然非常简单。

例如:

  • 1.1分支为110000
  • 1.2分支为120000

感谢您的详细回答。您提出的观点都是合理的、对于其他有同样问题的人来说都是好的选择。 - Vito Andolini

0

0

我还没有尝试过,但我正在考虑进入构建机器,并在每个作业中将nextBuildNumber文件替换为指向某个位置的符号链接。可能会出现什么问题呢?嗯,同时访问可能是一个问题。如果Jenkins从头开始重新创建文件,即通过删除和创建,而不是像平常一样打开它,可能会有问题。


Jenkins似乎将构建编号保存在内存中,只有在构建编号增加时才更新文件,并在启动时读取它 - 不幸的是。 - too
谢谢你提供的信息@too。我从来没有尝试过这种方法,或者任何其他方法。 - orion elenzil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接