在開始講怎麼利用GitLab CI/CD打包Android項目以前,先來了解一下什麼是CI/CD。html
先來看下官方文檔就CI/CD的解釋,如圖git
CI/CD
就是
- 持續集成
- 持續分發
- 持續部署
而GitLab CI/CD就是GitLab內置的有這些做用的工具。瞭解了什麼是GitLab CI/CD,接着來看CI/CD的工做原理。docker
GitLab CI/CD的一次工做由如下幾個組件組成。shell
它們三者之間的關係以下圖所示服務器
Runners
。
Runners 由Runner組成,一個Runner執行一個Job,能夠設置任意數量的Runner,Runner能夠放在服務器上和本地的計算機上。app
瞭解了GitLab CI/CD中的組件,那麼他們是怎麼配合以及分工執行的呢?其實他們怎樣執行是由.gitlab-ci.yml
腳本文件來安排的。這個腳本文件就是一個Pipeline
,裏面有一個或多個job
組成一個jobs
,job
裏面有不一樣的Stages
。ssh
能夠從官方文檔是來看CI/CD
的基本工做流,如圖curl
從圖中能夠看出CI/CD
能作的工做由不少,如自動編譯、測試和打包,其實還能作檢查代碼,自動化測試等工做。工具
前文已經說了,要執行Pipeline
是須要Runner的,那麼怎樣安裝Runner呢?安裝以前能夠看下本身的GitLab倉庫中是否已經有Runner呢?操做步驟是:進入本身的GitLab項目->在Setting
菜單中選擇CI/CD
的菜單項,會看到下面的界面gitlab
Expand
按鈕,就能夠看到此項目是否有Runner了,能夠看下我如今項目下的Runner,如圖
Runner
,一個是共享的(在服務器上),一個是我本身電腦上的。若是在服務器上已經有了一個共享的Runner,那麼你能夠直接在服務器上來配置Android的運行環境和打包的環境,我是本身不方便操做服務器,纔在本身的電腦上安裝的Runner,
這裏推薦在服務器上來配置Runner和安裝環境,由於若是是多人開發的話,這樣能夠統一打包的環境。 下面來講下在本地配置Runner的方法,這裏以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
複製代碼
註冊Runner
gitlab-runner register
複製代碼
輸入GitLab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com(你的GitLab地址)
複製代碼
輸入token
Please enter the gitlab-ci token for this runner
xxx
複製代碼
token能夠在這裏獲取,就是前文看是否有Runner的那個地方
輸入Runner的描述,至關於這個Runner的名稱
Please enter the gitlab-ci description for this runner
[hostname] my-runner
複製代碼
輸入Tag,能夠輸入多個,以英文逗號分割,Tag的做用是若是有多個Runner,能夠根據.gitlab-ci.yml
腳本設置的Tag來選擇對應的Runner。
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
複製代碼
選擇以什麼方式執行,由於是是本地的電腦,因此選擇shell
就好了
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
複製代碼
執行如下命令,運行Runner
cd ~
gitlab-runner install
gitlab-runner start
複製代碼
運行以後,就能夠在GitLab倉庫中看到運行的Runner了。
先直接看下我項目中的這個文件
# 就是上文說的stages
stages:
- build_debug # 這裏就是一個stage,能夠定義多個stage,這個stage就是下面的build_debug
# 構建以前會執行的腳本,這裏導入本地的環境變量
before_script:
- export ANDROID_HOME=/Users/work/Android/SDK
- export PATH=$PATH:${ANDROID_HOME}/tools
- export PATH=$PATH:${ANDROID_HOME}/platform-tools
- chmod +x ./gradlew
# 聲明一個名叫build_debug的構建任務
build_debug:
stage: build_debug
# 構建中,執行一些腳本
script:
- ./gradlew --stacktrace assembleDevelopDebug
# 指定監聽哪個分支或何時觸發Pipeline
only:
- tags #這裏tags的做用是當修改gitlab項目tag的時候會觸發
- test # 監聽GitLab的這個分支
# - master
# 指定由哪個runner運行
tags:
- dev # 這個dev是上文註冊Runner時的tag,和註冊時候tag同樣的話就會用對應的Runner來執行任務
# 指定成功後應附加到任務的文件和目錄的列表
artifacts:
paths:
- app/build/outputs/
# 構建完成以後執行的腳本
#after_script:
# - 這裏若是是要配合monkey的話,通常在這個地方執行monkey的腳本
複製代碼
上面的腳本中已經介紹了一些語法,能夠發現這些恰好能夠和前文說的幾個組件對應上,另外還有一些其餘的語法,能夠查看官方文檔。
如今來總結一下本篇文章的主要內容,首先,介紹了什麼是GitLab CI/CD,接着,簡單的介紹了GitLab CI/CD的工做原理和一些組成組件,還介紹了怎麼配置本地的Runner,最後,看了.gitlab-ci.yml
文件並介紹了一些經常使用的語法。用好GitLab CI/CD的話,是能夠大大增長咱們的工做效率的,把一些重複的勞動交給機器來自動完成,但願本文能讓你對GitLab的 CI/CD有個基本的認識並能利用它來完成自動打包工做。
本文已由公衆號「AndroidShared」首發