前言
GCP 的 Cloud Build 是個非常好用的 DevOps 工具, 對於使用 Cloud Source Repository
的開發者來說, 不需要繁複的設定, 就能快速的建立 CI/CD Pipeline,
使推送到 Cloud Source Repository 的交付能自動觸發 Cloud Build
的事件執行測試與部署
除此之外無伺服器的平台, 不需要額外管理 CI/CD 的伺服器, 也不避擔心 Scale
的問題, 這也是許多開發者選擇 Cloud Build 的原因之一
以下就簡單的帶各位了解如何在 Cloud Build 上建立 Pipeline 跑 CI/CD 的流程
首先, 建立 Pipeline 腳本
由於 Cloud Build 是基於容器的服務, 腳本上的指令都必須跑在容器的環境內,
所以在建立腳本的時候, 需要特別地指定執行環境的容器映像( 即 Builder 的映像), 如下
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myapp', '.']
目前 GCP 上已經內建了幾個常用的容器映像讓開發者使用, 所以想要實作 CI/CD 的 Pipeline 並不一定需要自己建立 Builder 的映像檔
預設所有要被執行的腳本都需要被定義在 cloudbuild.yaml 的檔案裡
內容如下
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myapp', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/myproject/myapp']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['run','deploy','myapp','--image','gcr.io/myproject/myapp','--platform','managed','--region','us-central1','--project', ${_PROJECT_NAME}]
基本上這個腳本做了三件事建立 docke image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myapp', '.']
推送 docker image 至 Google Container Registry (GCR)
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/myproject/myapp']
最後在 Cloud Run 上部署服務
- name: 'gcr.io/cloud-builders/gcloud'
args: ['run','deploy','myapp','--image','gcr.io/myproject/myapp','--platform','managed','--region','us-central1','--project', ${_PROJECT_NAME}]
建立觸發條件
腳本編寫完後, 下一件事就是建立觸發條件
在 Cloud Build 的頁面上選擇 Trigger 後, 可以在頁面上方的位置找到 Create Trigger 的選項
進入 Create Trigger 的頁面之後, 就可以設定要連結的 Repository, 以及設定該由哪個 Branch 來觸發事件
最後可以選擇是否要設定變數, 以下圖為例, 新增了一個變數 _PROJECT_NAME, 在 Cloud Build 執行腳本的時候, 就會將這個變數給帶進來
以上都設定完後, 只要做 git push <指定的分支>, Cloud Build 就會開始執行腳本
腳本包含邏輯判斷
如果腳本很複雜, 需要邏輯判斷的陳述式在裡頭, 這時可以將 entrypoint 預設執行的動作, 改成執行 bash 如下
範例一開始會先起一個容器起來, 然後執行 CURL 的指令去打容器內的服務, 若最後回傳的 Status Code 不等於200, 就會丟出 exit 1 強制中斷整個 Pipeline 的流程
注意: 因為 Builder 用的網路預設是 cloudbuild, 所以要測試的容器也必須被放在 cloudbuild 的網路下, 這樣的話在 Builder 跟測試容器的網路才能相通
留言
張貼留言