专栏文章 掌握使用 gitlab ci 构建 Android 包的正确方式

布道师玄柯 · 2020年06月22日 · 3225 次阅读

最近公司在做移动端的项目,自然而然的需要搭建打包的环境。本来计划用 Jenkins 的,但是发现在 gitlab 上创建完项目后,提示去配置 pipeline,于是决定用 gitlab 去尝试下,毕竟我觉得 Jenkins 的配置过于复杂了。

gitlab-runner

在 gitlab 中,gitlab-runner 相当于 Jenkins 中的 slave 的概念,所以首先需要给项目配置一个 runner。gitlab-runner 分为三种:Shared Runner、Group Runner、Specific Runner。其中:

  • Shared Runner 相当于全局的 runner,所有的项目都可以使用。
  • Group Runner 相当于给一个分组设置 runner,因此,分组中所有的项目都可以使用。
  • Specific Runner 顾名思义,就是项目特有的 runner。只有这一个项目才能使用。

个人建议使用 Group Runner,你可以根据不同种类的项目,创建不同的分组,比如:Android、IOS、服务端等,然后针对每个分组创建对应的 Group Runner,这样相互之间不会有影响,同时又不需要为每个工程单独创建 runner。

安装 gitlab-runner

需要在你的打包机器上安装 gitlab-runner,在不同的平台上,安装 gitlab-runner 的方式不一致,可以参考官方文档:https://docs.gitlab.com/runner/install/mac 为例:。这里以

# 下载文件
$ sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
# 配置权限
sudo chmod +x /usr/local/bin/gitlab-runner
# 启动gitlab runner
gitlab-runner install
gitlab-runner start

注册 gitlab-runner

[root@app3 ~]# sudo gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=6324 revision=1b659122 version=12.8.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.4.194/
Please enter the gitlab-ci token for this runner:
rbLy6bwsNbTuzD_6Bma4
Please enter the gitlab-ci description for this runner:
[app3]: testandroid
Please enter the gitlab-ci tags for this runner (comma separated):
testandroid
Registering runner... succeeded                     runner=rbLy6bws
Please enter the executor: parallels, docker-ssh+machine, custom, docker-ssh, shell, ssh, virtualbox, docker+machine, kubernetes, docker:
docker
Please enter the default Docker image (e.g. ruby:2.6):
jangrewe/gitlab-ci-android
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

执行上面的命令,就能将 gitlab-runner 注册到 gitlab 中,需要说明下执行命令时输入的几个参数,其中 gitlab-ci coordinator URL 和 gitlab-ci token 可以从项目(Group 需要 master 权限)的 Settings—>CI/CD—>Runners 中查看,如下图所示:

gitlab-ci description 是对 runner 的描述,根据情况填写即可。

gitlab-ci tags 是 runner 的标签,在后面的配置文件中会用到。

enter the executor 是配置 runner 使用的执行器,可以是 shell,如果你需要执行 shell 脚本的话。我们这里使用的是 docker,使用了一个包含 Android 环境的容器:jangrewe/gitlab-ci-android。

另外,需要注意,在 gitlab 所在服务器的/etc/gitlab-runner/config.toml 配置文件中也可以对 gitlab-runner 的注册信息进行修改。

重启 gitlab-runner

需要注意的是,往 gitlab 注册一个新的 runner 之后,需要将 gitlab-runner 进行重启,这样,注册的 runner 才能生效。我在操作的时候,因为没有重启,花了好多时间解决出现的问题。其实只要重启即可解决。

检查 gitlab-runner 的状态

配置好之后,可以在项目的 settings—>CI/CD 中查看新增的 runner 是否是 running 状态,如下图所示:

配置 Android 工程

runner 配置好后,接下来的工作就是配置 Android 项目,只需要在工程目录下创建.gitlab-ci.yml 配置文件,然后往里面填充你想要实现的步骤即可,有点类似 Jenkins 中的 pipeline 脚本。不过,感觉 gitlab ci 的配置更加简单一些。我项目中的配置文件如下所示:

image: gitlab-ci-android:V2 # 用来编译 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.sh

stages:
  - build

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

# 构建测试包
qa:
  stage: build
  only:
    - qa
  script:
    - ./gradlew assembleDebug
    - sh -x /cache/deploy-android.sh
  artifacts:
    paths:
      - app/build/outputs/apk/debug/
  tags:
    - android

上面配置的大致意思是:当开发往 qa 分支提交代码时,会触发构建测试包,打包完成后,会将包上传到一个文件服务器上,方便下载安装。

最后上一个 gitlab 的效果图:

总结

整体来看,是不是挺简单的,大家可以直接在 gitlab 上玩 ci/cd,大大降低了成本。所以如果大家现在还没有将 CI/CD 做起来的,大家可以考虑直接用 gitlab 来玩。
转载:https://mp.weixin.qq.com/s/DtsS-d7XS9EwkVXitFf6TQ

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册