我正在尝试使用GCP cloudbuild进行CI / CD。
以前,我以前使用 TAG最新标签推送镜像,并在部署中使用相同的标签,但是它没有提取最新镜像,所以现在我将其更改为使用 TAG $ COMMIT_SHA 。现在,我不知道将基于commit_sha的带有TAG的新映像传递给部署的方法。
nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mynginx
spec:
replicas: 3
minReadySeconds: 50
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: gcr.io/foods-io/cloudbuildtest-image:latest
name: nginx
ports:
- containerPort: 80
cloudbuild.yaml
steps:
#step1
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/cloudbuildtest-image:$COMMIT_SHA', '.' ]
#step 2
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/cloudbuildtest-image:$COMMIT_SHA']
#STEP-3
- name: 'gcr.io/cloud-builders/kubectl'
args: ['set', 'image', 'deployment/mynginx', 'nginx=gcr.io/foods-io/cloudbuildtest-image:$COMMIT_SHA']
env:
- 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
- 'CLOUDSDK_CONTAINER_CLUSTER=cloudbuild-test'
images:
- 'gcr.io/$PROJECT_ID/cloudbuildtest-image'
注意:之前我重复了我对图像使用最新标签的操作, 与部署中的相同,我希望将新映像与 cloudbuild的第3步,但是没有,所以我在 TAG,但现在想知道如何更改部署清单。是 在这里使用仅 helm 的解决方案?
答案 0 :(得分:2)
您需要执行一个步骤来替换Deployment.yaml中的标记,一种方法是使用环境变量并使用envsubst
来替换它。
更改deployment.yaml:
- image: gcr.io/foods-io/cloudbuildtest-image:$COMMIT_SHA
使用一些bash
脚本替换变量(例如,使用ubuntu
step)
envsubst '$COMMIT_SHA' < deployment.yaml > nginx-deployment.yaml
使用sed
的替代方法:
sed -e 's/$COMMIT_SHA/'"$COMMIT_SHA"'/g' deployment.yaml > /workspace/nginx-deployment.yaml