讓你的 CI/CD Pipeline 執行得更有效率

Posted March 9, 2022. News from blog.gitlab.com ‐ 1 min read

當 Pipeline 越來越複雜時,如何提升它的執行速度與效率就是一個好問題!

GitLab 自從推出 GitLab CI 功能之後,隨著每一次的更新,GitLab CI 的相關功能似乎就進化了一些,如今 GitLab CI 已經可以做到相當複雜的結構,甚至可以組合出各種花式技巧(!?),稍微扯遠了一些,總之我想要表達的是現在如果你的專案需要又長又大又肥又複雜的 CI/CD Pipeline,那麼 GitLab CI 絕對是足以應付,但是一旦你的 Pipeline 開始進入前面說的這種「又長又大又肥又複雜」的情況時,多半你也必須開始處理下一個階段的 Pipeline 議題,即是如何提升整條 Pipeline 的執行速度與效率!

在 2022/3/9 GitLab 官方部落格就針對這個議題,發布了一篇文章,作者提到了他的一些建議與看法!

文章的小編不負責任之摘要如下

  • 作者先聲明不同的情境下的 Pipeline 需要改善的方向不同,不能全盤通論,本文他只是提出一些他的主觀看法。
  • 改善 Pipeline 要注重全局觀,局部改善(優化)不見得會為整體帶來益處。
  • 常見的兩個改善建議。
    • 執行更少的 Job 與 Pipeline。
    • 縮短 Job 與 Pipeline 的執行時間。
  • 改善的第一步是「觀察與量測」,如同老梗,減肥之前要先量體重,不知道現在整體 Pipeline 及 Job 分別花費多少時間,怎麼知道該從哪裡下手?
  • 善用 GitLab CI 的 rules,讓 Pipeline 只產生必要的 Job。
  • 善用 interruptible 這個 GitLab CI Keyword,讓過期的 Pipeline 可以被自動中斷,既然都過期了,就別跑了,直接讓最新的 Pipeline 跑下去即可。
  • 善用 needs 與 parallel,要知道 Job 不一定要是 A 跑完才能跑 B,也許 A 與 B 是可以同步並行一起跑的,因此準備夠多的 Runner,並且讓那些沒有先後順序的 Job 一起跑,減少無謂的等待時間。
  • 控管 Pipeline 的 Fail,如果有哪些關鍵的 Job 是絕對不能 Fail,那盡可能讓優先執行它們。
  • 善用 Cache 加速。
  • 最小化 Container image 的容量。(小編覺得,其實 Artifacts 也可思考一下最小化的議題。)
  • Pipeline 的改善是一條漫漫長路!

文章摘要就到此結束,如果你也有在思考如何改善 Pipeline 速度與效率的議題,記得閱讀官方文章的原文喔!

同場加映,台灣 GitLab Hero 之一的墨嗓 (mouson),針對 GitLab CI Pipeline 的持續改善與加速,也有 iThome 鐵人賽 30 篇好文,很值得大家收藏閱讀!