GitLab: Auto DevOps 之牛刀小試
本系列文是從 iT 邦幫忙鐵人賽系列文章搬至 gitlab-book.tw,鐵人賽撰文時 GitLab 仍為 12.x 版本,因此本系列文內容已有部分過期,本次搬移至此後,會視狀況新增一些補註說明。
On this page
本系列文是從 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 件事情分別如下:
- Auto Build
- Auto Test
- Auto Code Quality
- Auto SAST (Static Application Security Testing)
- Auto Dependency Scanning
- Auto License Compliance
- Auto Container Scanning
- Auto Review Apps
- Auto DAST (Dynamic Application Security Testing)
- Auto Deploy
- Auto Browser Performance Testing
- Auto Monitoring
在缺少 K8S 的情況下,Auto DevOps
就無法幫你自動產生上面的 8、10、12。
接著我們先用最簡單的方式,簡單試用一下 Auto DevOps
,有興趣的人可以參閱以下的步驟:
在 gitlab.com 註冊帳號並登入。
建立新的 Project,並選擇
Create from template
,然後 template 選擇 Ruby on Rails。(別誤會,艦長完全不會 Ruby。)進入
Settings > CI/CD > Auto DevOps
,並勾選Default to Auto DevOps pipeline
。
(GitLab 也會提醒你,需要有 K8S 與 Domain name 才能 Auto Deploy。)最後你就可以在
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
又能玩出什麼花樣!鐵人賽,我們明天見嘍~