如何编写kubernetes部署以获取使用GCP cloudbuild构建的最新映像

时间:2019-10-16 05:12:26

标签: kubernetes google-cloud-platform google-cloud-build

我正在尝试使用GCP cloudbuild进行CI / CD。

  1. 我已经在GCP中准备好了一个k8s集群。检查下面的部署清单。
  2. 我已经准备好一个cloudbuild.yaml来构建新映像并将其推送到注册表和命令以更改部署映像。检查下面的cloudbuild yaml。

以前,我以前使用 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 的解决方案?

1 个答案:

答案 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