天天看點

掌握使用gitlab ci建構Android包的正确方式

最近公司在做移動端的項目,自然而然的需要搭建打包的環境。本來計劃用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建構Android包的正确方式

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狀态,如下圖所示:

掌握使用gitlab ci建構Android包的正确方式

配置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建構Android包的正确方式
掌握使用gitlab ci建構Android包的正确方式

總結

整體來看,是不是挺簡單的,大家可以直接在gitlab上玩ci/cd,大大降低了成本。是以如果大家現在還沒有将CI/CD做起來的,大家可以考慮直接用gitlab來玩。