用极狐GitLab为Android App创建自动化CICD

如何用极狐GitLab 为 Android App 创建自动化CI/CD?详细教程来了

提起 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文件中,添加如下内容:

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 安全文件

接下来,需要把 keystore 文件上传到极狐GitLab 以便进行 CI/CD 构建:

  1. 在导航栏顶部,选择菜单 → 项目,找到你的项目;
  2. 在左侧导航栏,选择设置 → CI/CD;
  3. 在安全文件部分,选择展开;
  4. 选择上传文件;
  5. 找到要上传的文件,选择打开,然后开始上传文件,当上传完成后会在列表中看到对应的文件。

将 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 流水线会被触发,然后你就可以看到对应的工作在执行中了。

参考:

1. .gitlab-ci.yml:

https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/demo-projects/android_demo/-/blob/main/.gitlab-ci.yml

2. fastlane/Fastfile:

https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/demo-projects/android_demo/-/blob/main/fastlane/Fastfile

3. 指导文档:

https://docs.fastlane.tools/plugins/using-plugins/

4. 配置指南:

https://docs.gitlab.com/ee/user/project/integrations/google_play.html?_gl=1*1rdsq3v*_ga*MTA1MjA4NTY0LjE2MzQ4MDA1NDU.*_ga_ENFH3X7M5Y*MTY4NzIyNzY0MS40MDMuMS4xNjg3MjMxNDYxLjAuMC4w

#极狐Gitlab#
全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务