掌握使用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 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來玩