Jenkins在工作岗位上共享内部版本号?

Vit*_*ini 8 jenkins

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

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

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

cof*_*aks 6

简短回答使用时间戳或手动设置versionCodes,在不需要时将内容保留在CI服务器之外.或者强制jenkins构建数字.

很长的回答我喜欢jenkins负责自动化某些也可以自行运行的东西.因此,如果我不需要jenkins进行设置,我也很高兴.

此外,如果您使用2个分支,您可能会以随机顺序提交它们.试图在某些方面将工作联系在一起似乎是一个不必要的麻烦,以后可能会出现问题.例如,如果版本2.0现在构建和QAed,只是等待正确的发布日期和营销团队完成其工作,但是之后你需要发布v1.1.1快速修复?根据您选择的解决方案,您可能需要触发一些重建以强制执行versionCode bump.新建,新QA?

您对versionCode的真正要求是它高于之前的版本.

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

android:versionCode内部版本号.

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

所以这里有两个解决方案:

  • 手动碰撞.在我们的项目中,我使用一些sed脚本在发布之前自动化构建号的碰撞.由于我还需要手动更改一些内容,例如versionName前缀,在开发期间禁用/启用调试模式等,我手动运行bumpversion脚本,以便我的分支中的下一个构建具有适当的版本和versionCode编号.注意我在versionName中使用jenkins内部版本号.如果为v2选择足够大的versionCode凹凸,此解决方案可以防止在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


Kee*_*yOn 0

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

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

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