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

问题描述 投票:1回答:1

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

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

以前,我曾经使用TAG Latest来推送镜像,并在部署中使用相同的标签,但是它没有提取最新的镜像,所以现在我将其更改为使用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仅解决方案?

kubernetes google-cloud-platform google-cloud-build
1个回答
0
投票

您需要一个步骤来替换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
© www.soinside.com 2019 - 2024. All rights reserved.