使用 Packer 构建虚拟机映像

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 搭配使用,Cloud Build 服务帐号需要 Compute Engine Instance Admin 角色。如需授予角色:

  1. 找到 Cloud Build 服务账号:

    CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT --filter="(bindings.role:roles/cloudbuild.builds.builder)"  --flatten="bindings[].members" --format="value(bindings.members[])")
    
  2. 将 Compute Engine Instance Admin 角色添加到服务账号:

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/compute.instanceAdmin
    

创建 Packer 构建器映像

Cloud Build 提供 Packer 社区构建器映像,可用于在 Cloud Build 中调用 packer 命令。在 Cloud Build 配置文件中使用此构建器之前,您必须构建映像并将其推送到项目中的 Container Registry:

  1. 克隆 cloud-builders-community 代码库:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. 导航到 Packer 构建器映像:

    cd cloud-builders-community/packer
    
  3. 将构建器提交到您的项目:

    gcloud builds submit .
    

使用 Packer 构建器

  1. 确保您拥有 packer.json 文件以及源代码。

  2. 在项目根目录中,创建一个名为 cloudbuild.yamlcloudbuild.json构建配置文件

  3. 在构建配置文件中,添加构建步骤以调用 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"
           ]
        }
       ]
    }
    

    其中:

    • [PROJECT_ID] 是您的 Google Cloud 项目 ID。
    • [IMAGE_NAME] 是您要构建的虚拟机映像的名称。
    • [IMAGE_FAMILY] 是虚拟机映像的映像系列
    • [IMAGE_ZONE]映像地区
  4. 使用构建配置文件启动构建:

    gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
    

    其中:

    • [CONFIG_FILE_PATH] 是构建配置文件的路径。
    • [SOURCE_DIRECTORY] 是源代码的路径或网址。
    • [REGION]受支持的构建区域之一。

    如果您未在 gcloud builds submit 命令中指定 [CONFIG_FILE_PATH][SOURCE_DIRECTORY],则 Cloud Build 会假定配置文件和源代码位于当前工作目录中。

构建映像后,您可以在 Google Cloud 控制台的 Compute Engine 映像页面中查看这些映像。

后续步骤