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

时间:2015-05-11 15:20:57

标签: android git jenkins continuous-integration

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

每次推送到主分支机构,我都想构建一个新的App版本,该版本已上传到Google Play商店的Alpha频道。为此,我需要为每个版本增加App的versionCode。

为此我似乎有几个选择:

  1. 在Jenkins构建期间增加数量,并将更改的文件推回到repo。
    • 我不喜欢让我的构建服务器进行推送/提交。
  2. 使用git hook增加数量。
    • 我更喜欢使用git来修改文件。如果我在度假时(在团队的其他成员中)会找到这个并知道如何处理它?<​​/ li>
  3. 在另一台服务器(构建服务器可以直接访问)上保存一个文件,保存当前版本。 Gradle将访问它,增加它和它再次保存。
    • 这似乎“脆弱”但至少我可以有一个简单的'increaseVersion'任务,只在服务器上执行。如果它中断(如果我们移动服务器或其他东西),它很容易修复。
  4. 目前,我最喜欢3个。

    有人有明确的方法吗?

1 个答案:

答案 0 :(得分:21)

我没有使用上述内容 - 就像你一样,我不想改变每个版本的回购,也不想改变任何文件。

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 commit。