GitLab CI/CD課程10

GitLab Executors — Different Executor Types

ZONGRU Li
Aug 8, 2022

如前篇介紹,GitLab Runner是已安裝所需程式的Server

  • 使用於Pipeline中各個Jobs
  • 但是GitLab提供的Runner並不一定是我們所需要執行Job的機台

比如說有以下的Pipeline流程,會分別對應底下的工具要先安裝好:

普遍的Pipeline流程與對應的工具

Shell Executor:

而上述這些指令工具的執行是依賴於OS(作業系統,windows,mac,linux等)

並且所有的Server上的Shell都是GitLab Runner上面安裝好的

這些Server會自己匹配(fetches job)

而實際上要安裝的指令工具可能有(npm,ssh,docker,甚至java,maven…)

所以理論上需要手動先將這些工具指令進行安裝才能使用

甚至複雜些,後續還有針對這些Server上的工具設定&升級的工作

然後Runner可能需求不只一台,第二台又要重新安裝這些工具

這些重複工作令人頭痛

甚至還有這種需求狀況:

不同的Job需求不同版本的工具

所以還有安裝版本的管理問題!

到最後Execute多數的Job在同一個RunnerServer慢慢地堆積檔案物件

機台變得越來越複雜,甚至需要手動清理

Executors的選擇,來當作Runner Server:

  • 當註冊了一個Runner,將可以自行選擇所需要的executor

1.Docker Executor:

  • i.e.Runner工作運行於Docker container之內
  • Jobs運行在User提供的Docker images
  • i.e.每個Jobs都運行於分別且獨立的Container之內
  • 而那些所需要的工具就得要事前打包進Docker image
  • 好處在於可以依據所需要的工具版本選用不同Container,不會有衝突

2.Virtual Machine Executor:

  • 考量到若公司內沒有人了解Docker等容器技術,那麼虛擬機會是個選項
  • 依樣可以獨立環境
  • 但是會花更多的時間在OS開關機等

3.Kubernetes Executor:

  • 允許使用既存的K8S Cluster來提供極高的擴展性
  • 過程中會起Pod來執行Jobs

4.Docker Machine Executor:

  • 特殊版本的Docker executor
  • 支援自動擴展(auto-scaling)
  • 依據Docker官方文件在機台上或雲端動態建立Docker host
  • 一樣是透過建立機台,安裝Docker,設置Docker client來與機台溝通
  • 透過這個機制的話,會多一層Docker管理的層級
  • Docker Machine Executor運作起來會像是Docker executor
  • 並且這抑是GitLab的Shared Runner使用的Executor方案
  • 但是這邊要特別注意的是 →Docker Machine已經被Docker棄用!
  • 之後GitLab應該會移除這項方案

另外還有兩種型態的executor,但是通常不太會考慮用這樣的方案

5.Shell Executor:

  • 允許GitLab連線到外部Server去跑RunnerJobs

6.Parallels Executor:

  • 平行的跑一台甚至多台的虛擬機executor,其他還有像VirtualBox

該選哪一個Executor!?

LINK
  • 有各種情況可以挑選所需要的來使用
  • 相對比較能應付多種狀況的選項 →Docker executor(on Linux Runner)
  • 但是當然還有其他特殊CASE例如要跑PowerShellwindows server
  • 就要另外考慮!
  • 甚至有可能規劃上有要求所有一切建置都要在K8S Cluster上面的狀況

Configuration Executor for Runner

  • 當註冊一個Runner,就必須要挑選一種executor來使用
  • 只允許"1 executor per runner"
  • 但是也有可能有需求是需要在一個host內多種executor的調用
  • 可能有不同Job需要Shell executor,另一個需要Docker executor
  • 所以會需要多個Runner在同一個host內運作
  • 比如說一個機台內有10Runner可以調用!
  • 各個Runner分別對應各種所需要的executor
需要多個Runner對應不同的executor!

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet