You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Cloud Build与Compute Engine实现Google Cloud部署自动化及解决更新报错

解决Cloud Build报错并实现Managed Instance Group滚动更新

一、解决Docker拉取权限报错

你遇到的pull access denied for gcloud报错,原因是Cloud Build步骤中使用了错误的镜像名:name: 'gcloud'。Docker会默认去Docker Hub拉取这个镜像,但官方的gcloud Cloud Builder镜像托管在Google Container Registry,正确的镜像地址是gcr.io/cloud-builders/gcloud。

二、实现Managed Instance Group滚动更新

你之前尝试直接更新单个VM实例的方式不适用于Managed Instance Group(MIG)。MIG的滚动更新需要通过更新实例模板再触发实例组更新的方式实现,具体步骤如下:

  1. 基于现有实例模板创建新模板,替换为Artifact Registry中的新镜像
  2. 让MIG使用新模板执行滚动更新,逐步替换旧实例

修改后的完整cloudbuild.yaml

steps:
  # Step 0: Install packages
  - name: 'gcr.io/cloud-builders/npm'
    args: ['install']

  # Step 1: Build the Nest.js application
  - name: 'gcr.io/cloud-builders/npm'
    args: ['run', 'build']

  # Step 2: Build the Docker image
  - name: 'gcr.io/cloud-builders/docker'
    args:
      - 'build'
      - '-t'
      - 'asia-south2-docker.pkg.dev/${PROJECT_ID}/core-apis/core-apis:latest'
      - '.'

  # Step 3: Push the Docker image to the Artifact Registry
  - name: 'gcr.io/cloud-builders/docker'
    args:
      - 'push'
      - 'asia-south2-docker.pkg.dev/${PROJECT_ID}/core-apis/core-apis:latest'

  # Step 4: 创建新的实例模板(基于原有模板,替换镜像)
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'compute'
      - 'instance-templates'
      - 'create'
      - '${_NAME}-template-v$(date +%Y%m%d%H%M%S)'
      - '--source-instance-template'
      - '${_NAME}-template' # 替换为你现有的实例模板名称
      - '--container-image'
      - 'asia-south2-docker.pkg.dev/${PROJECT_ID}/core-apis/core-apis:latest'
      - '--zone'
      - 'us-central1-c'

  # Step 5: 更新Managed Instance Group,触发滚动更新
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'compute'
      - 'instance-groups'
      - 'managed'
      - 'set-instance-template'
      - '${_NAME}-mig' # 替换为你的MIG名称
      - '--template'
      - '${_NAME}-template-v$(date +%Y%m%d%H%M%S)'
      - '--zone'
      - 'us-central1-c'
      - '--min-ready'
      - '30s' # 可选:设置新实例就绪等待时间
      - '--max-surge'
      - '20%' # 可选:滚动更新时允许超出的实例比例
      - '--max-unavailable'
      - '10%' # 可选:滚动更新时允许不可用的实例比例

options:
  logging: CLOUD_LOGGING_ONLY
substitutions:
  _NAME: 'core-apis'

关键说明

  • 实例模板命名:用时间戳后缀确保每次构建生成唯一的模板,避免冲突
  • 滚动更新参数:--max-surge和--max-unavailable可以根据你的业务需求调整,控制更新的容错性和速度
  • 变量替换:确保${_NAME}-template和${_NAME}-mig与你现有的实例模板、MIG名称一致
  • Cloud Build权限:确保Cloud Build服务账号拥有compute.instanceTemplates.create和compute.instanceGroups.setInstanceTemplate的权限

内容的提问来源于stack exchange,提问作者Lavneesh Jaggi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:03:11