iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0

前言

從今天以及之後的幾篇文章,將介紹如何打造 GitLab CI 流水線,以及如何透過 ArgoCD 來部署應用。

CI/CD 要幫助我們做哪些事?

CI/CD 的目的是希望透過撰寫腳本的方式,將軟體開發到部屬的流程自動化,使服務能夠快速上線,並減少人為失誤,下面就來介紹 CI/CD 工具到底可以幫助我們完成哪些工作。

Build Image

在做測試或部屬也好,需要有環境執行,但放在 Repository 上的只有程式碼,沒辦法直接跑起來,所以 CI/CD 的第一步會是 Build ,在這個步驟,會使用專案的 Dockerfile 來 Build 出 Image,提供後續工作執行環境。

Test App

這個步驟會對建置好的 App 進行檢查,像是能否成功執行、Coding Style 是否符合,最重要是會做 Unit Test,針對程式進行正確性的檢驗,通過測試環節,確保應用程式可以正常運作後,才能進入後續的部屬任務。

Publish Image

測試完成後,需要將 Image 保存起來,提供部屬環境做使用,所以這個步驟就是將 Image 上傳到遠端的 Container Registry 。

Stage Deploy

雖然已經對 Image 進行了多種測試,但因為環境配置不同,投入到正式環境可能又會遇到一系列的麻煩,所以在進入生產環境前,會先將程式放入到與生產環境相仿的測試環境,我們稱之為 Staging , 在這裡對服務做一次實際測試,確定沒問題後,才能夠正式上線。

Production Deploy

所有的測試都沒問題後,就可以將服務部屬到生產環境,因為這個動作需要等待前一步完成後才能執行,所以會設定為手動觸發。

這裡的 Deploy 看似麻煩,其實只需要更新 Manifest 的 Image Tag 就行了,在之後的文章會詳細說明怎麼做。

.gitlab-ci.yml 基本建置

在 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
    • 這個 Job 屬於哪一個 Stage
  • only
    • 在哪個 Branch 才會執行
  • script
    • 需要執行的指令

設定好 StageJob 後,就可以建置出一個基本的 CI/CD 流水線,就來實際動手操作吧!

建立 CI/CD Pipeline

  1. 進入 Cloud Shell 網站,點擊終端機輸入指令

  2. 建立 .gitlab-ci.yml 檔案

cd project && touch .gitlab-ci.yml
  1. 點擊左上 Explorer -> Open Folder -> 選擇 project 資料夾 -> Open

  1. 點擊 .gitlab-ci.yml 檔案並貼上以下內容

https://ithelp.ithome.com.tw/upload/images/20210917/20139235i3L2FoC53M.png

  • .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 為手動觸發。

  1. 建立 Commit 並 Push 到 GitLab 上
git add .
git commit -m "init .gitlab-ci.yml"
git push origin master
  1. 輸入 GitLab 帳號密碼後按Enter
Username for 'https://gitlab.com': 
Password for 'https://user@gitlab.com':
  1. GitLab 網站,點擊之前建立的 web app 的 Repository

  2. 進入到 Repository 後,點擊 CI/CD -> Pipelines

https://ithelp.ithome.com.tw/upload/images/20210917/201392357u4MjrGSMO.png

這裡可以看到每一次 CI/CD 的運行結果。

https://ithelp.ithome.com.tw/upload/images/20210917/20139235lKCMO7cNaz.png

點擊運行結果就可以看到執行狀態以及 Log 。

https://ithelp.ithome.com.tw/upload/images/20210917/20139235FNeDw2irOm.png

結論

今天完成了 CI/CD Pipeline ,但對 Stage 我們還沒有做任何實際意義上的工作,所以之後幾天中會講解要如何建立各個 Stage 已完成 CI/CD 所需步驟。


上一篇
Day16 - 準備 GitLab 的 GitOps 環境
下一篇
Day18 - GitLab CI 自動建置 Docker Image
系列文
DevOps 好想學!新手也能打造雲端 Study Lab30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言