Jenkins 跨作业共享构建号?

标签 jenkins

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

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

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

最佳答案

简短回答使用时间戳或手动设置版本代码,在不需要时将内容保留在 CI 服务器之外。或者强制 Jenkins 内部版本号。

长答案 我喜欢 Jenkins 负责自动化一些也可以独立工作的东西。因此,如果我不需要 Jenkins 进行设置,我也很高兴。

此外,如果您使用 2 个分支,您可能会以随机顺序提交给它们。试图以某种方式将这些工作捆绑在一起似乎是一个不必要的麻烦,以后可能会成为问题。例如。如果 2.0 版本现在已经构建并进行了 QA,只是等待适当的发布日期和营销团队完成其工作,但之后您需要发布 v1.1.1 快速修复程序怎么办?根据您选择的解决方案,您可能需要触发一些重建以强制版本代码碰撞。新构建,新质量检查?

您对 versionCode 的真正要求是它高于以前的版本。

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

android:versionCode An internal version number.

This number is used only to determine whether one version is more recent than another, with higher numbers indicating more recent versions. This is not the version number shown to users; that number is set by the versionName attribute. The value must be set as an integer, such as "100". You can define it however you want, as long as each successive version has a higher number. For example, it could be a build number. Or you could translate a version number in "x.y" format to an integer by encoding the "x" and "y" separately in the lower and upper 16 bits. Or you could simply increase the number by one each time a new version is released.

这里有两个解决方案:

  • 手动碰撞。在我们的项目中,我使用一些 sed 脚本在发布前自动更新内部版本号。由于我还需要手动更改一些内容,例如 versionName 前缀、在开发过程中禁用/启用 Debug模式等,因此我手动运行凹凸版本脚本,以便分支中的下一个构建具有适当的版本和 versionCode 编号。注意我在 versionName 中使用 jenkins 内部版本号。如果您为 v2 选择足够大的版本代码,此解决方案可以防止您遇到 v2 准备好后需要退出 1.1.1 的问题。

  • 另一个更自动化但仍然简单的解决方案是使用时间戳之外的东西。 YYMMDDHHSS 的格式足够好,是一个整数(< 2^31),并且很可能您要发布的任何版本都将在前一个版本之后准备好,而不是在同一分钟内准备好。所以基本上当你构建 v1.1 时,它会得到例如1308131600,如果你在 v1.2 获得 1308131601 后一分钟构建它。(这显然不能帮助你应对 v1.1.1/v2 场景)

以下是一些脚本生成/更新版本代码 Auto increment version code in Android app 的想法.

Jenkins 方式

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

例如

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

关于Jenkins 跨作业共享构建号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18195731/

相关文章:

android - 如何将 Android 设备连接为 Jenkins 从站以执行自动测试

jquery - 如何从html中单击事件的下拉按钮调用django中的外部python脚本

java - 为什么MANIFEST.MF和类文件中的JDK版本不同

groovy - 如何在 Jenkins 作业 DSL 脚本中获取种子作业的名称?

jenkins - Jenkins 管道中的节点、阶段和步骤之间有什么区别?

maven - Jenkins Pipeline Maven Artifactory 插件无法从中央 Maven 存储库解析 Artifact

jenkins - 如何在 jenkins 管道中使用 java 库?

jenkins - 如何将 Gradle 构建 currentVersion 写入文件

jenkins - 退出代码以设置构建不稳定 - Jenkins DSL 脚本

jenkins - Gradle + Jenkins + Artifactory Maven 仓库?