GitLab: Auto DevOps 之牛刀小試

本系列文是從 iT 邦幫忙鐵人賽系列文章搬至 gitlab-book.tw,鐵人賽撰文時 GitLab 仍為 12.x 版本,因此本系列文內容已有部分過期,本次搬移至此後,會視狀況新增一些補註說明。

本系列文是從 iT 邦幫忙鐵人賽系列文章搬至 gitlab-book.tw,鐵人賽撰文時 GitLab 仍為 12.x 版本,因此本系列文內容已有部分過期,本次搬移至此後,會視狀況新增一些補註說明。 鐵人賽原文網址:https://ithelp.ithome.com.tw/articles/10225210

【新增補充】Auto DevOps 以及 GitLab 與 K8s 的整合方式都經歷一番大更新,因此本文有多處內容都過期了,建議各位讀者可以直接略過本文,改為查看原廠最新文件

GitLab 自從 10.0 開始,新增了神奇的 Auto DevOps 功能,顧名思義 Auto DevOps 就是一個會幫你自動產生 CI/CD Pipeline 的功能。看到「自動」我想工程師的眼睛一定都亮了起來,特別是有實際參與 CI/CD Pipeline 相關工作的人,一定巴不得能有一個工具可以全自動的搞定 CI/CD Pipeline 的各種疑難雜症。

從今天開始讓我們一步又一步試用 GitLab 的 Auto DevOps,看看它到底有多神奇!

在沒有 Kubernetes 的狀況下試用 Auto DevOps

如果你想要啟用全套的 Auto DevOps,我們必須四大 Requirements 必須克服:

  • 能夠運行 Docker 的 GitLab Runner
  • 能自由掌控的 Domain name
  • Kubernetes(K8S)
  • Prometheus

我想這裡面最大的關卡就是 Kubernetes cluster 了。如果你打算要自行架設並管理 K8S,那務必要做好覺悟,因為你即將跌入一個深不見底、看不到盡頭的技術坑。如果你沒有此等覺悟,建議暫時先乖乖的使用各家雲端供應商提供的 K8S 服務。

GitLab 官方目前也大力推薦使用者直接採用 GCP 的 Google Kubernetes Engine (GKE),並且與 GCP 合作祭出了優惠免費試用方案。如果你是 GCP 的新用戶,GCP 原本就有提供 300 美元的免費試用額度。但如果你選用 GKE 作為你的 K8S Cluster,並將其與 GitLab 整合,你就可以再額外申請另外 200 美元的免費試用額度。


(在 Admin Area > Kubernetes 就可找到上面這段敘述。不過在實際申請時,還會需要填寫一個表單、提供一些背景資訊,因此也不是你隨便想拿就能拿到這額外的 200 美元免費試用額度。)

在繼續為 GitLab 設定 K8S 之前,讓我們先問一句,真的一定要有 K8S 才能使用 Auto DevOps 嗎?其實也不盡然,只是在你還沒設定 K8S 與 GitLab 整合之前,你所啟用的 Auto DevOps,最多只會幫你產生兩個 Stage 即 build 與 test。也就是 GitLab 洋洋灑灑列出 Auto DevOps 能夠達成的 12 件事情中,會有幾件做不到,這 12 件事情分別如下:

  1. Auto Build
  2. Auto Test
  3. Auto Code Quality
  4. Auto SAST (Static Application Security Testing)
  5. Auto Dependency Scanning
  6. Auto License Compliance
  7. Auto Container Scanning
  8. Auto Review Apps
  9. Auto DAST (Dynamic Application Security Testing)
  10. Auto Deploy
  11. Auto Browser Performance Testing
  12. Auto Monitoring

在缺少 K8S 的情況下,Auto DevOps 就無法幫你自動產生上面的 8、10、12。

接著我們先用最簡單的方式,簡單試用一下 Auto DevOps,有興趣的人可以參閱以下的步驟:

  1. 在 gitlab.com 註冊帳號並登入。

  2. 建立新的 Project,並選擇 Create from template,然後 template 選擇 Ruby on Rails。(別誤會,艦長完全不會 Ruby。)

  3. 進入 Settings > CI/CD > Auto DevOps,並勾選 Default to Auto DevOps pipeline


    (GitLab 也會提醒你,需要有 K8S 與 Domain name 才能 Auto Deploy。)

  4. 最後你就可以在 CI /CD > Pipelines 中查看 Auto DevOps 幫你自動產生的 Pipeline。


    (可以看見 Pipeline 會有 Auto DevOps 的 Label。)

我們可以比較一下 Ruby on Rails 或 .NET Core 產生的 Pipeline 並不相同。如下圖 Ruby on Rails 在 Stage: Test 會自動產生 6 個 CI Job。

同場加映,如果是 php 的 Framework Laravel 一樣會在 Stage: Test 自動產生 6 個 CI Job。

讓我們詳閱 build 的 CI Job 看看 Auto DevOps 做了些什麼。(以前面的 Ruby on Rails 為例)

首先,可以看見確實有用到 Docker 在執行 CI Job,不過這邊跟我之前在文中提到的不太一樣,gitlab.com 這裡設定的是會自己 scaling 的 docker-auto-scale 的方式。

然後,老樣子的會去取得 Source code 接著執行 build 的動作。

接著在這一段,就會看到 Auto DevOps 在 build 這項 CI Job 是會先掃過一遍你的 Source Code 判斷使用了哪些程式語言,接著再自動執行對應的指令。

同樣的也查看一下 test 的 CI Job,也確實有執行 bin/rails test,並且有輸出測試結果,當然因為我們是全新乾淨的 template,所以沒有太多內容。

在 Stage: Test 還有其他的 CI Job 就不一一詳閱了,但必須要實話實說的是雖然在 Pipeline 上有產生這些 CI Job 但並不是每一個都發揮 100% 的功能,因為根據 GitLab 官方文件,Auto DevOps 的某些功能需要升級付費。

小結

今天我們先面最簡單的方式啟動 Auto DevOps,讓大家可以先感受一下它的神奇,大家如果有興趣,可以先在 gitlab.com 上拿各種開源專案的程式碼丟上去看看,你就會發現說是神奇,但其實也有限制,並不是這麼的萬能。今天就先牛刀小試到此,明天我們再來試試看加上了 K8S 之後,Auto DevOps 又能玩出什麼花樣!鐵人賽,我們明天見嘍~

參考資料