文章目录

    • 前言
    • 系列文章
  • 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 持续集成实践(五)—— ABI 分包、特殊渠道编译需求

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 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-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: buildonly:- masterscript:- ./gradlew assembleDebugtags:- android# 利用标签打测试包,格式:“x.x.x-beta.x”
beta:stage: buildonly:- /^[\d]+\.[\d]+\.[\d]+-beta\.[\d]+$/script:- ./update-version-code- ./gradlew assembleDebugartifacts:paths:- app/build/outputs/apk/debug/tags:- android# 利用标签打测试包,格式:“x.x.x”
release:stage: buildonly:- /^[\d]+\.[\d]+\.[\d]+$/except:- branchesscript:- ./update-version-code- ./gradlew assembleReleaseartifacts: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 虚拟机 传文件

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

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

    文章目录 前言 系列文章 Android 持续集成实践(四)--配置 WebHook 通知编译结果 团队沟通工具 创建团队 创建讨论组 添加 BearyChat 机器人 配置 WebHook gitl ...

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

    文章目录 前言 系列文章 Android 持续集成实践(三)--编写 .gitlab-ci.yml 实现自动化 要实现的效果 定义 gitlab-ci 工作场景阶段 定义 build 任务 定义 re ...

  3. 持续集成实践二之Jenkins与Sonar Qube集成

    2019独角兽企业重金招聘Python工程师标准>>> 前言   作为一名码农,曾几何时,无数次挑灯夜战,只为第二天为客户稳定演示系统,奈何到关键时候,会发现代码中会有很多坑,这个时 ...

  4. Jenkins与Docker的持续集成实践

    本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...

  5. [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  6. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  7. 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)

    [安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...

  8. 使用Jenkins搭建iOS/Android持续集成打包平台

    http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...

  9. 软件自动化测试培训内容,软件自动化测试与持续集成实践培训方案

    一.背景概述 为响应工业和信息化部信息化高端人才培养的号召,中国信息化培训中心特推出了软件自动化测试与持续集成实践培训班,希望通过专业的培训与业界真实案例来全面提高学员软件自动化测试水平,从而更好地服 ...

最新文章

  1. Google、Azure、阿里云、RedHat…全球的 K8s 圈大佬聚在一起要聊啥?
  2. tp5分布式redis_TP5通过缓存数据到Redis
  3. 数据驱动精准化营销在大众点评的实践
  4. 【NOIP模拟】健美猫
  5. Djang drf:APIView源码分析
  6. Android自定义标题栏
  7. 内联初始化字段与类实例构造器
  8. 单点登录CAS-01:如何找到适合自己JDK版本的CAS?
  9. 数字化智慧工地,工地智能监管一体化解决方案
  10. 【CTA系列】Kelly公式在最优f问题上的应用
  11. 英雄之盾-第11届蓝桥杯Scratch省赛真题第4题
  12. 如何实现页面广告随时上下线、过期自动下线及到时自动上线
  13. pr制作节奏感抖动(变换)
  14. 喜马拉雅产品分析报告
  15. 路由器DMZ简单解说
  16. 为什么苹果蓝牙耳机连上还是公放_高版本AirPods无线蓝牙耳机二代、三代开团啦!...
  17. 关于学生机受控应用的问题总结
  18. 2020中级计算机工程师,2020年上半年中级网络工程师报考详解
  19. 静态顺序表和动态顺序表区别的优缺点比较
  20. Hackbar初步了解和火狐中安装

热门文章

  1. 常用ftp大全.txt
  2. idea中如何清除大量无用的废弃代码呢
  3. 2008年MBA全国联考英语考试大纲
  4. shell实战(二):cat EOF 追加与覆盖文件
  5. Ucinet三天写论文!北核科研网络精写
  6. 笨办法学python在线阅读_笨办法学python全集.pdf
  7. 安装UltralSO教程
  8. 毕业设计-基于 MATLAB 的工业机器人运动学分析与实现
  9. Windows:win10中查看自己的电脑版本号的五种方法
  10. Robomongo的安装及简单使用