GCP - Cloud Build 概述
對應到其他的雲端服務是 :
- Amazon Web Services (AWS) : ****
- Microsoft Azure : ****
Cloud Build
簡介
Cloud Build 的宗旨是無伺服器 CI 平台。以前我們需要在本地端或者準備專門的 VM,去處理部署的部分,現在可透過 Cloud Build 完成線上 build 和 簡單 deploy 的服務。
CloudBuild YAML簡介
簡單範例如下
steps:
- name: "hashicorp/terraform"
env:
- PROJECT_ID=$PROJECT_ID
script: |
terraform init
terraform apply -var "project_id=$PROJECT_ID" -auto-approve
- name 最關鍵的屬性,每一個 name 代表一個 docker image 且可以是不同得 docker image 。代表 Cloud Build 每 step 都會設置一個新 container 環境,每個 step 環境互相獨立。
官方有提供一些內建的 cloud-builders,值得一提的是 gcr.io/google.com/cloudsdktool/cloud-sdk 這個 image,
substitutions
以下三種寫法都一樣
- name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
entrypoint: "bash"
args:
[
"-c",
"bash script.sh $LOCATION ${_ZONE_CODE1}",
]
- name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
entrypoint: "bash"
args:
[
"script.sh",
"$LOCATION",
"${_ZONE_CODE1}"
]
- name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
env:
- LOCATION=$LOCATION
- ZONE_CODE1=${_ZONE_CODE1}
script: |
#!/usr/bin/env bash
bash script.sh $LOCATION $ZONE_CODE1
使用 args,可以直接讀取到 substitutions 和預設的變數
Secret value
要用secret ,只能用args
- name: "gcr.io/cloud-builders/gke-deploy"
env:
- PROJECT_ID=$PROJECT_ID
- LOCATION=$LOCATION
secretEnv: ["ACCESS_KEY", "SECRET_KEY"] # refer to secrets ONLY in the args field of a build step.
entrypoint: "bash"
args: ["script.sh"]
自動建構 Image 的Cloud Build 首先就是 Cloud Build 就像剛剛有稍微講過 就是我今天程式碼開發完成 你可以上傳到 GCP 它會經過 Cloud Build 幫你做成 Image 幫你把它 Build 起來 它就是可以做到 DevOps 或者是 CI/CD 裡面的自動整合 自動部署等等的一些作業 它包含了兩部分 一個是 Trigger 就是透過一些事件去驅動它 讓它去跑一些建構的 Job 就是誰觸發它了 然後就開始去跑它的 建立 Docker Image 的動作 它主要的一些細部設定 我們也是用 YAML 檔的方式 它就是一個很詳細的設定檔 比如說發生什麼事情了 然後接下來我要執行哪些作業 我會把這些 工作詳細的寫在 YAML 檔裡面 然後讓它開始跑這樣子 那 Artifact Registry