Android 持续集成实践(二)——配置 Docker + gitlab-runner 实现线上自动编译

前言

最近幸得空闲,就来自己实践一遍 Android 的持续集成,之前公司一直在使用同事搭建的 gitlab+ci+firim,确实是方便了很多,所以就有了自己实现一遍的想法。

在实践的过程中,也是磕磕绊绊各种填坑。网上有很多实现持续集成的教程,但是自己实践的时候各种坑总是出其不意的出现,所以我想记录一下我的实践过程,尽可能的做到详细,希望实践过程中遇到的问题,在这里都能找到解决方案。

系列文章

Android 持续集成实践(一)——从0开始搭建 Gitlab 服务器

Android 持续集成实践(二)——配置 Docker + gitlab-runner 实现线上自动编译

Android 持续集成实践(三)——编写 .gitlab-ci.yml 实现自动化

Android 持续集成实践(四)——配置 WebHook 通知编译结果

Android 持续集成实践(二)——配置 Docker + gitlab-runner 实现线上自动编译

在整个流程中,配置 dockergitlab-runner 的过程是我遇到问题最多的一个过程,也是由于我对他俩的概念不太清晰,所以在配置的过程中出现了很多麻烦和困扰。所以在开始之前,希望我们都能了解一下 docker 和 gitlab-runner 的工作原理。

安装 Docker

这里引用一下百度百科对 Docker 的介绍:传送门

# 查看当前系统内核版本,docker 要求内核版本高于 3.10 
uname -r
# 确保 yum 包更新到最新
sudo yum update
# 卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker  docker-common docker-selinux docker-engin
# 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 查看仓库中所有 docker 版本
yum list docker-ce --showduplicates | sort -r
# 安装docker 
sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-18.03.1.ce

docker 安装

安装成功后启动 docker 并加入开机启动

sudo systemctl start docker
sudo systemctl enable docker

安装 gitlab-runner

安装

# Add GitLab’s official repository
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
# install the latest version of GitLab Runner
sudo yum install gitlab-runner

注册 runner

这里假设你已经在 gitlab 上创建 git 仓库了。因为注册 runner 的时候需要用到 token,而 token 是在创建仓库或创建 group 之后才有的

sudo gitlab-runner register

运行注册命令后,会提示你填写一些配置信息:

gitlab-runner register

  • gitlab-ci coordinator URLgitlab-ci token 在仓库的 Settings->CI/CD 页面,直接复制就行
    url token

  • gitlab-ci description 是这个 runner 的描述

  • gitlab-ci tags 设置 runner 的标签,runner 只响应对应标签的编译任务

  • executor 这里填 docker,我们要用 docker 运行 android 编译环境

  • default Docker image 设置默认的镜像,这里使用 jangrewe/gitlab-ci-android
    这个镜像

安装成功后,就可以在仓库的 Settings -> CI/CD 中看到已安装的 runner 了:
runner 注册成功

配置 runner 缓存路径

在服务器上找一个文件夹挂载到 docker 容器里边,给 .gradle 做一个缓存,这样每次编译的时候,就不用一直下载 gradle 了,这里我挂载的是 /home/android-cache 文件夹:

vi /etc/gitlab-runner/config.toml

runner 挂载缓存分区
pull_policy = "if-not-present" 避免docker 镜像每次都pull

注意,如果你的 gitlab 服务器迁移了之后,如果不想再重新注册 runner,可以改这个配置文件的 url 和 token 为迁移后的值

签名文件的处理

在服务器上打包的时候,不可避免的就要用到签名文件,这里可以利用配置 runner 的时候挂载的缓存分区 /home/android-cache,把签名文件放在那里,这样处理的话,在 gitlab 服务器的代码仓库是看不到签名文件的,相对安全一点;签名文件的别名、密码等变量可以利用 gitlab-ci 的环境变量保存起来,可以对变量设置权限,这样处理比较安全。

  • 上传签名文件到缓存目录 /home/android-cache/keystore

    使用 FileZilla 上传签名文件到 缓存目录 /home/android-cache/keystore
    注意,此时我们的签名文件在服务器的路径是 /home/android-cache/keystore/key_zhoubin.keystore

  • 配置签名文件别名密码等参数

    位置:仓库的 Settings -> CI/CD -> Environment variables,如图:
    签名参数配置

  • build.gradle 签名配置

    签名文件在服务器上配置完了,这时候还需要配置一下 build.gradle 里边的 signingConfigs 节点。
    因为我们如果在本地打包的话,肯定是用不了服务器上的配置的,所以需要区分两个情况:
    build.gradle 配置

测试线上自动编译

我们来简单写个 .gitlab-ci.yml,测试一下提交代码推送到远端后的自动编译:

image: jangrewe/gitlab-ci-android # 用来编译 android 项目的镜像

variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false" # 禁用 gradle 守护进程

before_script:
#  配置 gradle 的缓存目录
  - export GRADLE_USER_HOME=/cache/.gradle
#  获取权限
  - chmod +x ./gradlew
  - chmod +x ./update-version-code

stages:
  - build

# 提交代码自动编译
build:
  stage: build
  only:
    - master
  script:
    - ./gradlew assembleDebug
  tags:
    - android

# 利用标签打测试包,格式:“x.x.x-beta.x”
beta:
  stage: build
  only:
    - /^[\d]+\.[\d]+\.[\d]+-beta\.[\d]+$/
  script:
    - ./update-version-code
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - app/build/outputs/apk/debug/
  tags:
    - android

# 利用标签打测试包,格式:“x.x.x”
release:
  stage: build
  only:
    - /^[\d]+\.[\d]+\.[\d]+$/
  except:
    - branches
  script:
    - ./update-version-code
    - ./gradlew assembleRelease
  artifacts:
    paths:
      - app/build/outputs/apk/
  tags:
    - android

测试编译结果:

ci 自动编译测试

下一篇:Android 持续集成实践(三)——编写 .gitlab-ci.yml 实现自动化
目标是:编译+加固+渠道+部署

参考资料

Centos7上安装docker
Install GitLab Runner using the official GitLab repositories
Registering Runners
本地电脑向 CentOS 7 虚拟机 传文件

展开阅读全文
©️2020 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值