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

Packer构建VM镜像存入GCP Artifact Registry相关技术疑问

Packer + GCP Artifact Registry 实操方案与疑问解答

一、更新后的Cloud Build配置(适配Artifact Registry与新版Packer)

以下是替换了过时GCR路径、升级到最新Packer版本的Cloud Build配置,保留原构建逻辑的同时适配新规范:

steps:
  - name: 'gcr.io/cloud-builders/wget'
    args: ["https://releases.hashicorp.com/packer/${_PACKER_VERSION}/packer_${_PACKER_VERSION}_linux_amd64.zip"]
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', '${_AR_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_DOCKER_REPO}/packer:${_PACKER_VERSION}',
           '-t', '${_AR_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_DOCKER_REPO}/packer:latest',
           '--build-arg', 'PACKER_VERSION=${_PACKER_VERSION}',
           '--build-arg', 'PACKER_VERSION_SHA256SUM=${_PACKER_VERSION_SHA256SUM}',
           '.']
substitutions:
  _PACKER_VERSION: 1.9.4  # 可替换为你需要的Packer稳定版
  _PACKER_VERSION_SHA256SUM: "d4a1b7e8f9c2d3a4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6"  # 对应版本的SHA256值,可在HashiCorp官网获取
  _AR_REGION: us-central1  # 你的Artifact Registry所在区域
  _AR_DOCKER_REPO: packer-tools  # 你创建的Docker类型仓库名称

images:
  - '${_AR_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_DOCKER_REPO}/packer:latest'
  - '${_AR_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_DOCKER_REPO}/packer:${_PACKER_VERSION}'
tags: ['cloud-builders-community']

同时补充Packer HCL2构建VM镜像并推送至Artifact Registry的配置,完全替代旧版YAML格式:

packer {
  required_plugins {
    googlecompute = {
      version = "~> 2.2.0"
      source  = "github.com/hashicorp/googlecompute"
    }
  }
}

source "googlecompute" "custom_vm" {
  project_id         = "你的GCP项目ID"
  zone               = "us-central1-a"
  source_image       = "debian-11-bullseye-v20240515"  # 基础镜像可按需替换
  image_name         = "custom-vm-image-{{timestamp}}"
  image_description  = "Packer构建的自定义VM镜像"
  # 配置Artifact Registry存储VM镜像
  artifact_registry {
    repository = "projects/你的GCP项目ID/locations/us-central1/repositories/vm-images-repo"
  }
}

build {
  sources = ["source.googlecompute.custom_vm"]
}

二、你的疑问解答

1. Artifact Registry仓库类型选择

分两种场景处理:

  • 若存储Packer工具的Docker镜像(即Cloud Build构建的那个镜像):选Docker类型仓库,这是容器镜像的标准存储类型。
  • 若存储Packer构建出的VM镜像:必须选**虚拟机镜像(Virtual Machine Image)**类型仓库。如果控制台创建时没看到这个选项,可通过gcloud命令创建:
    gcloud artifacts repositories create vm-images-repo --repository-format=vm-image --location=us-central1 --description="存储Packer构建的VM镜像"
    

绝对不要把VM镜像存到Docker仓库,两者格式不兼容,后续Terraform调用会报错。

2. cloudbuild.yaml中gcr.io的替换路径

把原配置里的gcr.io/$PROJECT_ID替换为Artifact Registry Docker仓库的前缀,格式为:

{区域}-docker.pkg.dev/{项目ID}/{Docker仓库名称}

举个实际例子:你的区域是us-central1,项目ID是my-gcp-project,Docker仓库名是packer-tools,替换后的完整镜像标签就是:

us-central1-docker.pkg.dev/my-gcp-project/packer-tools/packer:1.9.4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:05:18