使用Github Actions和Fastlane进行Android CI/CD

6

我正在使用fastlane自动化我的发布到Play商店。这里是一个示例alpha lane。

lane :alpha do    
    gradle(task: 'clean')
    gradle(
      task: 'assemble',
      build_type: 'Release',
      properties: {
        "android.injected.signing.store.file" => ENV["ANDROID_KEYSTORE"],
        "android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PASSWORD"],
        "android.injected.signing.key.alias" => ENV["ANDROID_KEY_ALIAS"],
        "android.injected.signing.key.password" => ENV["ANDROID_KEY_PASSWORD"],
      }
    )
    upload_to_play_store(track: 'alpha')
end

我希望使用Github actions自动化部署。每当对staging进行提交时,就运行fastlane alpha。但我遇到的问题是版本控制。我需要在build.gradle文件中提高versionCode的值。以前我在运行fastlane alpha之前都是手动修改这个值的。

我想要在提交之前消除手动提高这个值的需要,有什么方法可以实现吗?

我发现了这个fastlane插件来增加版本号。例如,如果版本号为1,在提交一次后,我的工作流会自动将versionCode提高到2。再次提交时,versionCode仍然为1,Github将它提高到2。然而,Play商店需要versionCode为3。理想的解决方案是让Github从Google Play商店查询我的应用程序的当前versionCode,并将其+1提供给fastlane。我已经搜索过了,但找不到解决方案。


我在这里发布了我的解决方案,对我有效。https://dev59.com/-FIH5IYBdhLWcg3wKqE7#72084875 - sahil sharma
2个回答

10

你尝试过这个吗:https://docs.fastlane.tools/actions/google_play_track_version_codes/

    g = google_play_track_version_codes
    gb = google_play_track_version_codes(track: 'beta')
    ga = google_play_track_version_codes(track: 'alpha')
    max_value = [g[0].to_i, gb[0].to_i, ga[0].to_i].max
    version_updated = max_value + 1
    increment_version_code(app_project_dir: "./app", version_code: version_updated.to_i)

基本上我正在获取 Google Play 的所有版本代码,并将最大版本号增加1,然后使用版本控制插件在 build.gradle 上更新它。


1
为明确起见,“google_play_track_version_codes” 从 Google Play 商店获取版本代码,对吗? - user82395214
2
是的,你必须检查所有轨道找到最大的那一个。 - rcarba
1
我得到了这个错误Google Api Error: apkNotificationMessageKeyUpgradeVersionConflict: APK specifies a version code that has already been used. - APK specifies a version code that has already been used.尽管插件increment_version_code显示版本代码已更改为4(这比Google Play商店中的版本号多一个) - user82395214
将答案标记为正确并将后续问题移至此处 - user82395214

2

您可以按照Atul Anand在Medium文章中描述的方法添加一个通道来完成此操作:

lane:IncrementBuildNumber do

    path = '../app/build.gradle'
    re = /versionCode\s+(\d+)/
    s = File.read(path)
    versionCode = s[re, 1].to_i
    s[re, 1] = (versionCode + 1).to_s
    f = File.new(path, 'w')
    f.write(s)
    f.close

end

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