💡 提起 keystore,也许方圆 5 公里内的 Android 开发人员都会顿感小恐慌😨,尝试通过自动化 CI/CD 流水线来部署应用程序,其结果可能会泼你一盆冷水🥶,配置 Google Play 的访问权限及代码签名也是令人沮丧的一个难题。
别担心!GitLab/极狐Gitlab 移动端 DevOps 在此!它能够让这些流程变得简单、快速,接下来我会指导大家完成这一切。
极狐GitLab Mobile DevOps 是内置在极狐GitLab 内部的一系列功能特性,帮助移动端团队解决在 DevOps 实践中面临的巨大挑战。
本文我将演示如何使用极狐GitLab 和 fastlane 来设置自动化 CI/CD 流水线。
一个 Google Play developer 账号:https://play.google.com/console
本地服务器上安装好 Ruby 和 Android Studio:https://docs.fastlane.tools/getting-started/android/setup/
本次教程,我们将使用 https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/demo-projects/android_demo 作为 Android demo 项目进行演示。
如果你还没有安装 fastlane,第一步就是来安装 fastlane。
在项目根目录下创建一个 Gemfile
,写入如下内容:
source "https://rubygems.org"
gem "fastlane"
接着,进入项目根目录,在命令终端执行如下命令,此命令将会安装 fastlane 和所有依赖:
bundle install.
fastlane 安装完成,开始设置项目。
依旧在项目根目录下,在命令行终端中执行如下命令:
bundle exec fastlane init
你将会被要求输入包名和对应信息。当提示输入 JSON 密钥文件时,可以先跳过这一步;对关于元数据管理的问题,可以直接回答“no”。
执行上述命令将会在项目下新建一个叫做 fastlane
的文件夹,其包含两个文件:Appfile
及 Fastfile
:
关于 Appfile 的详细配置信息,可查看 fastlane 的文档:https://docs.fastlane.tools/advanced/Appfile/。
接下来,创建一个用于代码签名的 keystore 和配置文件。
执行如下命令,在项目根目录下创建一个叫做 release-keystore.jks
的 keystore:
keytool -genkey -v -keystore release-keystore.jks \
-storepass password -alias release -keypass password \
-keyalg RSA -keysize 2048 -validity 10000
接着,使用 Gradle 创建一个配置文件。
在项目根目录下创建一个名为 release-keystore.properties
的文件,内容如下:
storeFile=../release-keystore.jks
keyAlias=release
keyPassword=password
storePassword=password
注意:定要确保将上面的文件都添加到 .gitignore
文件中,以便它们不会被提交到版本控制系统中。
配置 Gradle 来使用新创建的 keystore。
在 app/build.gradle
文件中,添加如下内容:
1. 在 plugins 下方,添加:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('release-keystore.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
2. 在 Build Types 上方,添加:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
3. 在 release build type 中添加 signingConfig:
signingConfig signingConfigs.release
接下来,需要把 keystore 文件上传到极狐GitLab 以便进行 CI/CD 构建:
将 release-keystore.jks
文件和 release-keystore.properties
文件都上传上去:
配置已就绪,接下来将 .gitlab-ci.yml
文件内容及下面的 fastlane/Fastfile 文件拷贝到项目中。
此 .gitlab-ci.yml 包含运行测试、构建及 beta 的所有配置。fastlane/Fastfile 是一个简单的样例,可以针对特定项目配置进行定制化。
注意:此 fastlane 配置用到了插件。查看指导文档来学习如何给项目配置 fastlane 插件。
接下来,在本地创建一个应用构建,将其上传到 Google Play 控制来以寻求一个新的应用条目。
在本地执行如下命令:
bundle exec fastlane build
此命令将创建一个签名的应用构建,位于:
build/outputs/bundle/release/app-release.aab
随着签名应用构建就绪,登录到 Google Play 控制台并创建一个新应用,然后和初始化构建关联起来。
最后一步就是在极狐GitLab 上完成 Google Play 集成。要实现这步,首先需要创建一个 Google 服务账号。
跟随配置指南在 Google 云平台上设置一个服务账号并且授权此账号可以访问 Google Play 项目。
通过提供包名及刚刚为服务账号生成的 JSON key 文件来完成 Google Play 集成的配置,详情可以查看配置指南。
这是一个简化的 CI/CD 配置,只创建了三个 CI/CD Job 来使用极狐GitLab Runner 执行 fastlane 中的每个部分。所有 CI/CD 流水线都会运行测试和构建 Job,但是只会在主分支的 CI/CD 流水线上执行 beta Job。Beta Job 也可以手动触发,因此你可以控制何时将 beta 发版推送到 Google Play。
所有配置完成,提交所有变更并将其推送到项目中,CI/CD 流水线会被触发,然后你就可以看到对应的工作在执行中了。