嗨嗨大家好!這週是漫長的一週!今天我們要繼續 SRE 方法論的第六條:資源部署,這裡是今天讀的原文出處:Introduction,那我們開始囉!
書中提到資源部署的代價是昂貴的,所以操作時務必謹慎小心。現今有許多工具能夠輔助我們進行相對穩定的部署。
目前的部署流程會像下圖:
這裡我們先著重看 cloudbuild.yaml,目前透過 Cloud Build 的 yaml 檔去部署:
gradle build
指令。timeout: 1800s
steps:
- name: gradle:7.6-jdk17
entrypoint: gradle
args: ['build']
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_CI_REGISTRY_IMAGE}/${PROJECT_ID}/${_CI_REGISTRY_IMAGE_NAME}/${_CONTAINERNAME}:$COMMIT_SHA', '--build-arg=ENVIRONMENT=${_NAMESPACE}','.']
id: 'build-gar'
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_CI_REGISTRY_IMAGE}/${PROJECT_ID}/${_CI_REGISTRY_IMAGE_NAME}/${_CONTAINERNAME}:$COMMIT_SHA']
id: 'push-gar'
waitFor:
- 'build-gar'
- name: node:18
entrypoint: bash
id: build-cdk8s
dir: cdk8s
args: ["-c", "npm install && npm run build && cp -r dist /workspace/dist && ls /workspace/dist && cat /workspace/dist/*.yaml"]
env:
- 'NAMESPACE=$_NAMESPACE'
- 'CONTAINERNAME=$_CONTAINERNAME'
- 'CI_COMMIT_SHA=$COMMIT_SHA'
- 'NODE_ENV=$_NODE_ENV'
waitFor:
- 'build-gar'
- name: 'gcr.io/cloud-builders/kubectl'
args: ['apply', '-f', '/workspace/dist', '--namespace=${_NAMESPACE}', '--record']
id: 'update-gke'
env:
- 'CLOUDSDK_COMPUTE_ZONE=${_ZONE}'
- 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER}'
waitFor:
- 'build-cdk8s'
今天主要復盤了工作中 Cloud Build 的部署方式,透過流水線的設置,除了部署的穩定度提高很多,也讓開發人員能夠安心地持續交付。接下來的內容是「效率與性能」!同時奔向我們第一章的終結!週日見!