文章目录

      • 前言
      • 系列文章
    • Android 持续集成实践(二)——配置 Docker + gitlab-runner 实现线上自动编译
      • 安装 Docker
      • 安装 gitlab-runner
        • 安装
        • 注册 runner
      • 配置 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 并加入开机启动

sudo systemctl start dockersudo systemctl enable docker

安装 gitlab-runner

安装

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

注册 runner

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

sudo gitlab-runner register

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

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

  • 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 缓存路径

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

vi /etc/gitlab-runner/config.toml


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 节点。
    因为我们如果在本地打包的话,肯定是用不了服务器上的配置的,所以需要区分两个情况:

测试线上自动编译

我们来简单写个 .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-codestages:  - 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

测试编译结果:

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

参考资料

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

更多相关文章

  1. Android7.0适配教程与心得
  2. Android(安卓)项目中文件夹作用(res文件夹详细介绍)
  3. Android工程编译时报 Error running app: Default Activity not
  4. Ogre3d 之使用 Android(安卓)NativeActivity
  5. ShareSDK for Android(安卓)只有新浪微博分享
  6. 学习android随手记 之 android:name android:id
  7. android-1-Android简单入门
  8. Android中DNS解析
  9. Mac下搭建 Android(安卓)反编译环境

随机推荐

  1. Android(安卓)高仿新浪微博底部导航栏,实
  2. Android 下交叉编译使用(Android NDK 默认
  3. Android进程管理机制及优化(HTC&其它可参
  4. android的wifi网卡移植详细过程已经通用
  5. Android的Activity屏幕切换动画||Gesture
  6. android RelativeLayout属性及demo
  7. Android 最火的快速开发框架XUtils
  8. Android之Http网络编程(三)
  9. Android近期学习总结——开发准备
  10. 【苦读官方文档】2.Android应用程序基本