本文来源:about.gitlab.com/blog
作者:Stojan Anastasov
译者:极狐(GitLab) 市场部内容团队
提起 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,第一步就是来安装 fastlane。
在项目根目录下创建一个 Gemfile
,写入如下内容:
source "https://rubygems.org"
gem "fastlane"
接着,进入项目根目录,在命令终端执行如下命令,此命令将会安装 fastlane 和所有依赖:
bundle install.
初始化 fastlane
fastlane 安装完成,开始设置项目。
依旧在项目根目录下,在命令行终端中执行如下命令:
bundle exec fastlane init
你将会被要求输入包名和对应信息。当提示输入 JSON 密钥文件时,可以先跳过这一步;对关于元数据管理的问题,可以直接回答“no”。
执行上述命令将会在项目下新建一个叫做 fastlane 的文件夹,其包含两个文件:Appfile
及 Fastfile
:
- Appfile 文件包含应用程序所需的配置信息;
- Fastfile 文件包含稍后进行替换的样例代码。
关于 Appfile 的详细配置信息,可查看 fastlane 的文档:https://docs.fastlane.tools/advanced/Appfile/。
代码签名
创建一个 keystore
接下来,创建一个用于代码签名的 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
配置 Gradle 来使用新创建的 keystore。
在 app/build.gradle
文件中,添加如下内容:
- 在 plugins 下方,添加:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('release-keystore.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
- 在 Build Types 上方,添加:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
- 在 release build type 中添加 signingConfig:
signingConfig signingConfigs.release
上传 keystore 到极狐GitLab 安全文件
接下来,需要把 keystore 文件上传到极狐GitLab 以便进行 CI/CD 构建:
- 在导航栏顶部,选择菜单 → 项目,找到你的项目;
- 在左侧导航栏,选择设置 → CI/CD;
- 在安全文件部分,选择展开;
- 选择上传文件;
- 找到要上传的文件,选择打开,然后开始上传文件,当上传完成后会在列表中看到对应的文件。
将 release-keystore.jks
文件和 release-keystore.properties
文件都上传上去:
创建 CI/CD 流水线
配置已就绪,接下来将 .gitlab-ci.yml
文件内容及下面的 fastlane/Fastfile 文件拷贝到项目中。
此 .gitlab-ci.yml 包含运行测试、构建及 beta 的所有配置。fastlane/Fastfile 是一个简单的样例,可以针对特定项目配置进行定制化。
注意:此 fastlane 配置用到了插件。查看指导文档来学习如何给项目配置 fastlane 插件。
在 Google Play 控制台创建一个应用
接下来,在本地创建一个应用构建,将其上传到 Google Play 控制来以寻求一个新的应用条目。
在本地执行如下命令:
bundle exec fastlane build
此命令将创建一个签名的应用构建,位于:
build/outputs/bundle/release/app-release.aab
随着签名应用构建就绪,登录到 Google Play 控制台并创建一个新应用,然后和初始化构建关联起来。
配置 Google Play 集成
最后一步就是在极狐GitLab 上完成 Google Play 集成。要实现这步,首先需要创建一个 Google 服务账号。
创建 Google 服务账号
跟随配置指南在 Google 云平台上设置一个服务账号并且授权此账号可以访问 Google Play 项目。
使能 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 流水线会被触发,然后你就可以看到对应的工作在执行中了。