既然會手動 build code 了,該來把這件事變成自動化了吧?
這篇文章不會說明如何撰寫 .gitlab-ci.yml,而是專注在如何將 Server 端的 Gitlab-Runner 該如何跑在 docker 上面。
為了這篇文章,還特別去全新安裝了一台 Ubuntu 20.04 LTS,所以如果手上的 Ubuntu 機器不是 20.04 LTS,也許環境上會有些差異。
1. 安裝
按照一般安裝 Ubuntu 的方式,應該可以順利安裝完成。等到安裝完成後,請打開 terminal 並輸入
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 若你裝完機器就不想要在機器前操作,可以先安裝 openssh-server 來用遠端機器透過 ssh login
sudo apt install openssh-server
sudo apt update && sudo apt upgrade -y
sudo apt install curl docker.io
# 將目前帳號加進 docker 群組,記得 logout 再 login 才能不使用 sudo 去跑 docker
sudo usermod -aG docker $USER
# 以下幾行只是留著紀錄, 用 docker 的做法不需要在本機環境安裝 gitlab-runner
# 將 GitLab-Runner 的 source 加進 apt source list
# ref: https://docs.gitlab.com/runner/install/linux-repository.html
#curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# 安裝 gitlab-runner
#sudo apt install curl docker.io gitlab-runner
|
到這邊就算把基本環境安裝完成了
2. 註冊 GitLab-Runner
一般我們跑 GitLab-Runner 應該都是直接執行 gitlab-runner register
後就開始設定了,不過因為我們想改用 docker 所以要改用 gitlab-runner 的 docker 來註冊
1
2
3
4
5
6
|
# 先建立一個目錄來存放 gitlab-runner 需要的設定檔
export GITLAB_RUNNER_HOME=/home/ubuntu/DockerConfig
docker run --rm -it \
-v $GITLAB_RUNNER_HOME:/etc/gitlab-runner \
--name gitlab-runner \
gitlab/gitlab-runner register
|
接著按照一般設定 gitlab-runner 的方式去設定,只是須注意在 executor
的選擇要從 shell
改選成 docker
註冊完畢後,應該就可以在 gitlab 上的 CI 葉面看到這個 runner 了,但還沒有啟動開始運作,不過在那之前,可以先將這個無用的 container 移除
1
2
3
4
5
6
|
# 先使用 docker ps 確認正在執行的 container
docker ps
# 檢查 id 後強制停止該 container
docker kill ${ID}
# 刪除該 id 的 container
docker rm ${ID}
|
3. 啟動 GitLab-Runner 的 container
1
2
3
4
5
|
export GITLAB_RUNNER_HOME=/home/ubuntu/DockerConfig
docker run -d --name gitlab-runner --restart always \
-v $GITLAB_RUNNER_HOME:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
|
4. 最後補充一個好用的 docker image
watchtower 可以幫忙自動更新 docker image, 算是懶人必備。
1
2
3
4
5
6
7
|
# https://www.hi-linux.com/posts/49978.html
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup
|
到這邊就結束了,可以去 GitLab server CI 頁面看看自己的 runner 是不是狀況正常了。