《關於我怎麼把一年內學到的新手 IT/SRE 濃縮到 30 天筆記這檔事》 Day 28 GitLab Runner - 安裝起來分配工作吧!
本篇大綱
今天要來介紹 GitLab 最大的功能,也就是 Runner,安裝 Shell executor 以後,講解一下 Kubernetes executor 跟 Shell executor 之間差異,並且分配工作給指定 Runner。
內文
這邊有兩個 Runner 需要講解,一個是 Kubernetes executor,另一個是 Shell executor,但在那之前,我們先來安裝 Shell executor 在 gitlab-runner 上。
安裝 Shell executor 在 gitlab-runner 上
點到 Admin > Overview > Runners 有個 Register an instance runner

久違來連線一下快被遺忘的 gitlab-runner

輸入上面的 Download and install binary 再到 Command to register runner
到 Command to register runner 會有一連串的問題詢問:
- Enter the GitLab instance URL:(直接按下 Enter)
https://gitlab.yjerry.tw - Enter the registration token:(直接按下 Enter)
你的 Token - Enter a description for the runner:
gitlab-shell-runner - Enter tags for the runner (comma-separated):
shell - Enter an executor:
shell
輸入完後面就會顯示:
1 | |
gitlab-runner 上安裝 kubectl & Helm
借一下 Day06 的 Script 來安裝 kubectl
1 | |

把 bastion-host 的 .kube/config 放到 /home/gitlab-runner/.kube/config,這部分就各位自行想辦法處理,相信使用 sudo su 搭配 mv 還有 chmod 應該不會太困難。
1 | |
那這樣接好以後,就可以嘗試在 Shell Runner 上跑跑看 kubectl。
建立 cicd-playground
那就可以來建立新專案在 GitLab 上,點一下 Create project

建立好 Project 以後,就點到 CI/CD > Editor

就可以來 Configure pipeline

下面的範例內容貼上去:
1 | |

看到 deploy-job 的時候,就會發現有出錯。

點進去下面那個連結,裡面說明有句話這樣寫:A common failure is when you have a .bash_logout that tries to clear the console.
也就是說 .bash_logout 會嘗試把 Console 的輸出給清空,這是為了安全所做的,但是在 GitLab Shell Runner 造成了阻礙,因此需要把它移除。
1 | |
設定完以後,就讓 Job Retry。

Job Retry 以後就 Passed,也證明 Shell Runner 可以連線到 K8s 上了。

接下來就來說說 Shell Runner 跟 K8s Runner 的差異吧!
Shell executor
Shell executor 顧名思義就是跑在 Shell 上,也就是在 Local 端,Host 本身就要安裝 Build 時候要跑的相關內容,不然系統會無法執行。
但沒辦法像 Docker 或 Kubernetes executor 區隔環境,編譯&測試就無法給它,剩下一個就是部署的部分,設定好部署的相關環境(E.g. kubectl)就可以執行。
Kubernetes executor
Kubernetes executor 就是跑在 K8s 上的 Runner,Runner 會常駐在 K8s Cluster 裡面,會去看看 GitLab 本身有沒有要排的 Job,如果有就呼叫 Kubernetes API 去建立 Pod 還有對應的資源執行 Jobs。
這個是 Kubernetes executor 執行的狀態:

看到裡面就會寫 Pod 的執行狀態,看看系統是不是在 Running。
大致流程圖會是這樣:

不過 Kubernetes executor 會有個需要注意的點,因為 Container 沒有打開 Privileged container,部署是不能使用 Docker 去 Build,需要使用 Unprivileged 的 Kaniko 來建立 Docker Image。
下一篇就是要來實戰 Registry 搭配 CI/CD 一起搭配完成部署了。
本系列內容也會同步貼到我的 iT 邦幫忙 https://ithelp.ithome.com.tw/users/20112934 歡迎來點一下追蹤,那我們就下一篇文章見啦!
