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
相关产品推荐
相关产品推荐

