在持续集成中增加 Android 内部版本号

Increment Android build number in Continuous Integration

我正在使用 Android Studio,Gradle,git。

每次推送到 master 分支时,我都想构建一个新的应用程序版本,并将其上传到 Google Play 商店的 Alpha 频道。为此,我需要为每个构建增加应用程序的版本代码。

为此我似乎有几种选择:

  1. 在 Jenkins 构建期间增加数量并将更改的文件推送回 repo。
    • 我不喜欢让我的构建服务器执行 pushes/commits。
  2. 用 git 挂钩增加数量。
    • 我更不喜欢使用 git 修改文件的想法。如果我在度假,谁(在团队的其他成员中)会找到这个并知道如何处理它?
  3. 在另一台服务器上有一个文件(构建服务器可以直接访问),其中保存了当前版本。 Gradle 将访问它,增加它并再次保存它。
    • 这看起来 'fragile' 但至少我可以有一个简单的 'increaseVersion' 任务只在服务器上执行。如果它坏了(如果我们移动服务器或其他东西),修复起来相当容易。

目前我最喜欢3个

有人有明确的方法吗?

我使用上面的 none — 和你一样,我不想为每个构建更改 repo,也不想更改任何文件。

Jenkins 对每个构建都有一个不断增加的值,通过 BUILD_NUMBER 环境变量公开。

在Gradle中,我在构建时以编程方式生成versionCode值,使用BUILD_NUMBER值确保versionCode始终高于之前的构建.

我的片段 build.gradle:

// Used to set the package version name and version code
ext.versionMajor = 1
ext.versionMinor = 2

android {
  defaultConfig {
    versionName computeVersionName()
    versionCode computeVersionCode()
  }
}

// Will return "1.2" in this example
def computeVersionName() {
    // Basic <major>.<minor> version name
    return String.format('%d.%d', versionMajor, versionMinor)
}

// Will return 120042 for Jenkins build #42
def computeVersionCode() {
    // Major + minor + Jenkins build number (where available)
    return (versionMajor * 100000)
             + (versionMinor * 10000)
             + Integer.valueOf(System.env.BUILD_NUMBER ?: 0)
}

所以我只需要在制作发布版本时更新顶部的两个值。对于所有其他构建类型,我可以让 Gradle/Jenkins 自动设置 versionCode 然后 upload to Google Play.

这也意味着,对于 Play 商店中列出的任何 alpha 版本,或通过检查 APK,我可以立即看到它来自哪个 Jenkins 构建,并从那里 git 提交。