從今天以及之後的幾篇文章,將介紹如何打造 GitLab CI 流水線,以及如何透過 ArgoCD 來部署應用。
CI/CD 的目的是希望透過撰寫腳本的方式,將軟體開發到部屬的流程自動化,使服務能夠快速上線,並減少人為失誤,下面就來介紹 CI/CD 工具到底可以幫助我們完成哪些工作。
在做測試或部屬也好,需要有環境執行,但放在 Repository 上的只有程式碼,沒辦法直接跑起來,所以 CI/CD 的第一步會是 Build ,在這個步驟,會使用專案的 Dockerfile 來 Build 出 Image,提供後續工作執行環境。
這個步驟會對建置好的 App 進行檢查,像是能否成功執行、Coding Style 是否符合,最重要是會做 Unit Test,針對程式進行正確性的檢驗,通過測試環節,確保應用程式可以正常運作後,才能進入後續的部屬任務。
測試完成後,需要將 Image 保存起來,提供部屬環境做使用,所以這個步驟就是將 Image 上傳到遠端的 Container Registry 。
雖然已經對 Image 進行了多種測試,但因為環境配置不同,投入到正式環境可能又會遇到一系列的麻煩,所以在進入生產環境前,會先將程式放入到與生產環境相仿的測試環境,我們稱之為 Staging , 在這裡對服務做一次實際測試,確定沒問題後,才能夠正式上線。
所有的測試都沒問題後,就可以將服務部屬到生產環境,因為這個動作需要等待前一步完成後才能執行,所以會設定為手動觸發。
這裡的 Deploy 看似麻煩,其實只需要更新 Manifest 的 Image Tag 就行了,在之後的文章會詳細說明怎麼做。
在 GitLab 要如何使用 CI/CD 工具,只需在專案裡建置名為 .gitlab-ci.yml
的檔案,GitLab 就會根據 yml 檔建置出 CI/CD 流水線。下面就簡單介紹 .gitlab-ci.yml
的基本格式。
Stage
代表著 CI/CD 裡的其中一個步驟,一開始需要先定義好 Pipeline 中有哪些 Stages
,並設定好前後順序。
stages:
- build
- test
- publish
- stg-deploy
- prod-deploy
Pipeline 會依序執行 build -> test -> publish -> stg-deploy -> prod-deploy 步驟
接著會在 Stage
裡設置一到多個 Job
來完成此步驟的工作,而為了區分在開發、部屬分支所需的 Job
不同,裡面會設定要在哪個 Branch 才會觸發。
job-name:
stage: build
only:
- branch
script:
- echo "My first job"
stage
only
script
設定好 Stage
和 Job
後,就可以建置出一個基本的 CI/CD 流水線,就來實際動手操作吧!
進入 Cloud Shell 網站,點擊終端機輸入指令
建立 .gitlab-ci.yml
檔案
cd project && touch .gitlab-ci.yml
左上 Explorer -> Open Folder -> 選擇 project 資料夾 -> Open
.gitlab-ci.yml
檔案並貼上以下內容stages:
- build
- test
- publish
- stg-deploy
- prod-deploy
build:
stage: build
only:
- dev
- master
script:
- echo "build job"
test:
stage: test
only:
- dev
- master
script:
- echo "test job"
publish:
stage: publish
only:
- master
script:
- echo "publish job"
stg-deploy:
stage: stg-deploy
only:
- master
script:
- echo "Staging deploy job"
prod-deploy:
stage: prod-deploy
only:
- master
script:
- echo "Production deploy job"
when: manual
在這裡定義了所需的 Stages 以及 Jobs ,且在 prod-deploy 會設定 when: manual 設定此 Job 為手動觸發。
git add .
git commit -m "init .gitlab-ci.yml"
git push origin master
Enter
Username for 'https://gitlab.com':
Password for 'https://user@gitlab.com':
到 GitLab 網站,點擊之前建立的 web app 的 Repository
進入到 Repository 後,點擊 CI/CD -> Pipelines
這裡可以看到每一次 CI/CD 的運行結果。
點擊運行結果就可以看到執行狀態以及 Log 。
今天完成了 CI/CD Pipeline ,但對 Stage 我們還沒有做任何實際意義上的工作,所以之後幾天中會講解要如何建立各個 Stage 已完成 CI/CD 所需步驟。