Packer 是一种开源工具,可以通过单一源配置为多个平台创建相同的虚拟机 (VM) 映像。本页面介绍了如何使用 Packer 和 Cloud Build 创建要在 Compute Engine 上使用的虚拟机映像。
准备工作
本页面的说明假定您熟悉 Packer
。此外:
- 准备好包含 Packer 模板的源代码。
- 如果您要使用本页面中的
gcloud
命令,请安装 Google Cloud CLI。 启用以下 API:
gcloud services enable sourcerepo.googleapis.com gcloud services enable compute.googleapis.com gcloud services enable servicemanagement.googleapis.com gcloud services enable storage-api.googleapis.com
必需的 IAM 权限
如需将 Packer 与 Cloud Build 搭配使用,请向 Compute Engine Instance Admin 角色 (
roles/compute.instanceAdmin.v1
) 您的构建服务账号如需将构建的映像存储在 Artifact Registry 中,请向 Artifact Registry Writer 授予 (
roles/artifactregistry.writer
) 角色 您的构建服务账号
创建 Packer 构建器映像
Cloud Build 提供
Packer 社区构建器映像
可用于在 Cloud Build 中调用 packer
命令。
在 Cloud Build 配置文件中使用此构建器之前,您必须构建映像并将其推送到项目中的 Container Registry:
克隆 cloud-builders-community 代码库:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
导航到 Packer 构建器映像:
cd cloud-builders-community/packer
将构建器提交到您的项目:
gcloud builds submit .
使用 Packer 构建器
确保您拥有 packer.json 文件以及源代码。
在项目根目录中,创建一个名为
cloudbuild.yaml
或cloudbuild.json
的构建配置文件。在构建配置文件中,添加构建步骤以调用
packer build
命令:YAML
steps: - name: 'gcr.io/[PROJECT_ID]/packer' args: - build - -var - image_name=[IMAGE_NAME] - -var - project_id=[PROJECT_ID] - -var - image_family=[IMAGE_FAMILY] - -var - image_zone=[IMAGE_ZONE] - packer.json
JSON
{ "steps": [ { "name": "gcr.io/[PROJECT_ID]/packer", "args": [ "build", "-var", "image_name=[IMAGE_NAME]", "-var", "project_id=[PROJECT_ID]", "-var", "image_family=[IMAGE_FAMILY]", "-var", "image_zone=[IMAGE_ZONE]", "packer.json" ] } ] }
其中:
使用构建配置文件启动构建:
gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
其中:
[CONFIG_FILE_PATH]
是构建配置文件的路径。[SOURCE_DIRECTORY]
是源代码的路径或网址。[REGION]
是受支持的 build 区域之一。
如果您未在
gcloud builds submit
命令中指定[CONFIG_FILE_PATH]
和[SOURCE_DIRECTORY]
,则 Cloud Build 会假定配置文件和源代码位于当前工作目录中。
构建映像后,您可以在 Compute Engine 映像页面中查看它们 Google Cloud 控制台中。