[Day29] CI /CD with GitLab CI
News from: IT 邦幫忙
今天要和大家分享的是 Continuous Integration (持續整合) 與 Continuous Deployment (持續部署),後續文章會簡稱 CI / CD。
市面上其實有非常多的 CI / CD 工具,例如 Travis CI、CircleCI、Jenkins,不過因為我大多數的專案都是存放在 GitLab 上,也因此大部分首選工具就會直接使用 GitLab 所提供的 GitLab CI
credit: https://medium.com/@brilvio/how-i-implemented-a-ci-build-of-delphi-binaries-using-gitlab-ci-d1123826698f
GitLab CI/CD workflow
上下兩張圖,其實都是在表達同一件事情,只是上面是 GitLab 官方詳細解釋 CI / CD 在開發工作流程中所扮演的角色與時機,而下面則是我簡化成要示範攥寫 GitLab CI 的流程圖。
https://docs.gitlab.com/ee/ci/introduction/img/gitlab_workflow_example_11_9.png
在示範情境中,會有一個主要分支 (Main) 以及從主要分支建立出去開發的功能分支,接著我們會發起 Merge Request 將功能分支合併至主要分支中,其中我會在發起 Merge Request 時觸發 CI 並且在合併完成時觸發 CD,這樣我們就完成了一個最簡單的 CI / CD。
.gitlab-ci.yml
要啟用 GitLab CI 我們只需要在專案的根目錄創建一個檔名為
.gitlab-ci.yml
的文件,並且定義好要執行的內容然後推送到 GitLab 上,GitLab 就會自動根據我們攥寫的內容執行 CI / CD 了。那我們就直接來看最終的程式碼,然後再為大家一一解釋到底寫了什麼。
stages:
stages 屬於 Global keywords 是用來定義 job 組(多個 job 可能會歸屬於同一個 stage)執行的順序。如果一個 stage 中的所有的 job 都成功,就會進入下一個 stage,如果 stage 中的任何一個 job 發生錯誤執行失敗,整個 CI / CD 的流程就會直接提前結束。
job
:
用來定義確切要執行的內容,例如編譯、安裝套件、執行測試或者打包部署。上面程式碼中第一層的
installDependencies
、unit-testing
、 e2e-testing
和 deploy
就是一個一個 job。我們可透個 Job keywords 來定義 job 的行為,例如範例程式碼中的
所以再搭配一次前面的流程圖來看:
- 在發起 Merge Request 時觸發 CI
- 在 build stage 中執行
installDependencies
。 - 接著在 test stage 中執行
unit-testing
和e2e-testing
(注意,同一個 stage 的兩個 job 是平行作業的,兩者並沒有一定的先後順序,如果想要有先後順序就必須定義成不同的 stage )
- 在 build stage 中執行
- 合併至主要分支時觸發 CD
- 在 build stage 中執行
installDependencies
。 - 在 deploy stage 中執行
deploy
。
- 在 build stage 中執行
Demo
我們來看一下實際畫面吧!當我們在 GitLab 上發起 Merge Request 時,會在頁面中看到「Detached merge request pipeline ... 」的字樣表示這個 merge request 有觸發 CI / CD pipeline。
如果點進去 pipeline 看,就會看到跟上面流程圖一樣的內容,這次的 merge request 執行了 build stage (installDependencies) 和 test stage (unit-testing & e2e-testing )。
當我們合併分之後,pipeline 執行的內容,也會跟流程圖所畫的一樣,執行了 build stage (installDependencies) 和 deploy stage (deploy)。
參考資料
- Gitlab CI/CD 介紹與 Runner 的架設. 此篇參考[DevOps] Gitlab CI/CD 及 GitLab 的… | by Kiwi lee | Medium
- [DevOps] Gitlab CI/CD - Kaka's Blog
- CI/CD concepts | GitLab
- 08. 踏入 CI/CD 的世界 - 觀念篇 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
- 功能強大的 -- GitLab CI - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
- Keyword reference for the
.gitlab-ci.yml
file | GitLab
留言
張貼留言