How to run GitLab CI Runner in Docker container?
Let’s getting start!
Environment & Tools
- Mac
- Docker
- GitLab
Work Flow
First — Install Docker
Step 1. 使用 Homebrew 安裝 Docker (前提 Homebrew 已安裝)
$ brew cask install docker
Step 2. 啟動 Docker for mac
$ open /Applications/Docker.app
Step 3. 安裝完 Docker 後
首先要開始註冊 Gitlab CI Runner
在註冊前要先知道自己 Gitlab CI 的 Runner token
Homebrew是一款自由及開放原始碼的軟體套件管理系統,用以簡化macOS系統上的軟體安裝過程,最初由馬克斯·霍威爾寫成。因其可延伸性得到了一致好評,而在Ruby on Rails社群廣為人知。 Homebrew使用GitHub,通過用戶的貢獻擴大對軟體包的支援。 (維基百科)
Second — Get CI Runner token
Gitlab提供3種Runner權限
What’s types of GitLab runner?
1. Shared Runner
2. Group Runners
3. Specific Runner
當數個專案的 CI/CD job 都有相同的需求,可以節省為了每一個專案各開一個 Runner ,而導致可能性的閒置。Runner 會根據 Project 正在運行的 job 來挑選接下來要運行的 job ,可避免有某個 Project 過量的 job 導致其他 project 的 job 無法執行。
如果是全repo共用的token要進入admin頁面並且選Runners頁面,就能找到你網站對應的URL與token。
該 Group 下的所有 Project 皆有此 Runner 的權限。採用 FIFO 來處理 jobs。
當組織中的多個專案 CI/CD job 需求的環境差很多時,需要採用這個來確保環境的隔離。此 Runner 採用 FIFIO 來處理 jobs。
假如是要註冊對特定repo使用的runner則是進入repo後點選 Setting -> CI/CD 然後點選頁面的Runner
Third — Register runner on Docker
有了URL及token就能開始註冊runner
Step 1. 啟動 gitlab-runner (Use Docker Volume way)
- 建立 Docker Volume
$ docker volume create gitlab-runner-config
2. 啟動服務並且連接到剛建立的 Docker Volume
$ docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitlab-runner-config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
Step 2. Register Docker Runner (依照上個步驟的Docker Volume)
- 連結到 Gitlab 做 runner 的註冊
$ docker run --rm -it -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest register
Step 3. 依序輸入相對應的資訊
- 輸入你的 Gitlab URL
$ Please enter the gitlab-ci coordinator URL
可在 Project (sidebar)
-> Settings
-> Runners
-> “Set up a specific Runner manually” 的第二項
2. 輸入 Gitlab-ci 的 token
$ Please enter the gitlab-ci token for this runner
同上的第三項
3. 輸入你想在 Gitlab 呈現的 runner 說明/名稱
$ Please enter the gitlab-ci description for this runner
4. 輸入 此Runner相關的tag
$ Please enter the gitlab-ci tags for this runner (comma separated):
5. 輸入Runner的啟動
$ Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
可依照個人需求修改(多以 Docker 為例,因為 Docker 能做的事情非常多),一般輸入 “docker“。
6. 輸入你打算使用的 Default docker image
$ Please enter the Docker image (eg. alpine:latest):
如果上個問題是寫Docker,就會出現這個問題,
此設定為當gitlab-ci沒有指定要使用哪個Docker image執行的話,預設要用哪個Docker image。
此Docker image預設會從 Docker hub下載,也可以在 project 的.gitlab-ci.yml
自行設定 image。
Step 4. 接著會顯示如下的訊息表示安裝成功
$ Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
完成上面步驟就會自動連到 gitlab 網站。