映像定义文件参考 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

映像定义文件参考

本部分仅供参考。有关使用源或部署操作为容器创建管道的更多信息,请参阅在中创建管道 CodePipeline

Amazon CodePipeline 容器操作(例如 Amazon ECR 源操作或 Amazon ECS 部署操作)的作业工作人员使用定义文件将图像 URI 和容器名称映射到任务定义。每个定义文件是操作提供方使用的 JSON 格式文件,如下所示:

  • Amazon ECS 标准部署需要 imagedefinitions.json 文件作为部署操作的输入。

  • Amazon ECS 蓝绿部署需要 imageDetail.json 文件作为部署操作的输入。

    • Amazon ECR 源操作生成 imageDetail.json 文件,并作为源操作的输出提供。

适用于 Amazon ECS 标准部署操作的 imagedefinitions.json 文件

映像定义文档是一个 JSON 文件,用于描述 Amazon ECS 容器名称以及映像和标签。如果您要部署基于容器的应用程序,则必须生成图像定义文件,为 CodePipeline 作业工作人员提供 Amazon ECS 容器和图像标识,以便从图像存储库(例如 Amazon ECR)中检索。

注意

该文件的默认文件名是 imagedefinitions.json。如果您选择使用不同的文件名,必须在创建管道部署阶段时提供。

创建 imagedefinitions.json 文件时注意以下事项:

  • 文件必须使用 UTF-8 编码。

  • 映像定义文件的最大文件大小限制为 100 KB。

  • 您必须创建 文件作为源或构建构件,以将其作为部署操作的输入构件。换句话说,请确保将文件上传到您的源位置(例如 CodeCommit 存储库),或者作为构建的输出构件生成。

imagedefinitions.json 文件提供容器名称和映像 URI。它必须采用以下一组键值对的结构。

name 容器名称
imageUri imageUri

此处为 JSON 结构,其中容器名称为 sample-app,映像 URI 为 ecs-repo,标签为 latest

[ { "name": "sample-app", "imageUri": "11111EXAMPLE.dkr.ecr.us-west-2.amazonaws.com/ecs-repo:latest" } ]

您还可以构造该文件以列出多个容器/映像对。

JSON 结构:

[ { "name": "simple-app", "imageUri": "httpd:2.4" }, { "name": "simple-app-1", "imageUri": "mysql" }, { "name": "simple-app-2", "imageUri": "java1.8" } ]

在创建管道之前,请使用以下步骤设置 imagedefinitions.json 文件。

  1. 在为管道计划基于容器的应用程序部署过程中,请计划源阶段和生成阶段 (如果适用)。

  2. 选择以下操作之一:

    1. 如果创建管道时跳过构件阶段,则您必须手动创建 JSON 文件并将其上传到源存储库,以便源操作可以提供构件。使用文本编辑器创建该文件,然后命名该文件或使用默认 imagedefinitions.json 文件名。将映像定义文件推送到源存储库。

      注意

      如果源存储库为 Amazon S3 桶,请务必压缩 JSON 文件。

    2. 如果管道具有生成阶段,请在生成规范文件中添加一个命令,以便在生成阶段在源存储库中输出映像定义文件。以下示例使用 printf 命令创建 imagedefinitions.json 文件。在 buildspec.yml 文件的 post_build 部分中列出此命令:

      printf '[{"name":"container_name","imageUri":"image_URI"}]' > imagedefinitions.json

      您必须在 buildspec.yml 文件中包含映像定义文件以作为输出构件。

  3. 在控制台中创建管道时,请在创建管道向导的部署页面上,在映像文件名字段中输入映像定义文件名。

有关创建使用 Amazon ECS 作为部署提供商的管道的教 step-by-step 程,请参阅教程:使用进行持续部署 CodePipeline

适用于 Amazon ECS 蓝绿部署的 imageDetail.json 文件

imageDetail.json 文档是一个 JSON 文件,用于描述您的 Amazon ECS 映像 URI。如果您要为蓝/绿部署部署基于容器的应用程序,则必须生成imageDetail.json文件以向 Amazon ECS 和 CodeDeploy作业工作人员提供图像标识,以便从映像存储库(例如 Amazon ECR)中检索。

注意

文件名称必须是 imageDetail.json

有关操作的说明,请参阅 Amazon 弹性容器服务和 CodeDeploy 蓝绿色

您必须创建 imageDetail.json 文件作为源或构建构件,以将其作为部署操作的输入构件。您可以使用以下方法之一在管道中提供 imageDetail.json 文件:

  • 在您的源位置中包含 imageDetail.json 文件,使其在管道中作为输入提供给 Amazon ECS 蓝绿部署操作。

    注意

    如果源存储库为 Amazon S3 桶,请务必压缩 JSON 文件。

  • Amazon ECR 源操作会自动生成 imageDetail.json 文件,作为下一个操作的输入构件。

    注意

    由于 Amazon ECR 源操作会创建此文件,因此具有 Amazon ECR 源操作的管道无需手动提供 imageDetail.json 文件。

    有关创建包含 Amazon ECR 源阶段的管道的教程,请参阅教程:使用 Amazon ECR 源和 ECS 目标部署创建管道 CodeDeploy

imageDetail.json 文件提供映像 URI。它必须使用以下键值对进行构造。

ImageURI image_URI
imageDetail.json

以下是 JSON 结构,其中映像 URI 为 ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/dk-image-repo@sha256:example3

{ "ImageURI": "ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/dk-image-repo@sha256:example3" }
imageDetail.json (generated by ECR)

每次将更改推送到映像存储库时,Amazon ECR 源操作都会自动生成 imageDetail.json 文件。Amazon ECR 源操作生成的 imageDetail.json 将作为源操作的输出构件,提供给管道中的下一操作。

以下是 JSON 结构,其中存储库名称是 dk-image-repo、映像 URI 是 ecs-repo 且映像标签是 latest

{ "ImageSizeInBytes": "44728918", "ImageDigest": "sha256:EXAMPLE11223344556677889900bfea42ea2d3b8a1ee8329ba7e68694950afd3", "Version": "1.0", "ImagePushedAt": "Mon Jan 21 20:04:00 UTC 2019", "RegistryId": "EXAMPLE12233", "RepositoryName": "dk-image-repo", "ImageURI": "ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/dk-image-repo@sha256:example3", "ImageTags": [ "latest" ] }

imageDetail.json 文件将映像 URI 和容器名称映射到 Amazon ECS 任务定义,如下所示:

  • ImageSizeInBytes:存储库中映像的大小(以字节为单位)。

  • ImageDigest:映像清单的 sha256 摘要。

  • Version:映像版本。

  • ImagePushedAt:将最新映像推送到存储库的日期和时间。

  • RegistryId:与包含存储库的注册表关联的 Amazon 账户 ID。

  • RepositoryName:向其中推送映像的 Amazon ECR 存储库的名称。

  • ImageURI:映像的 URI。

  • ImageTags:为映像使用的标签。

在创建管道之前,请使用以下步骤设置 imageDetail.json 文件。

  1. 在为管道计划基于容器的应用程序蓝绿部署过程中,请计划源阶段和生成阶段(如果适用)。

  2. 选择以下操作之一:

    1. 如果您的管道跳过了构建阶段,则必须手动创建 JSON 文件并将其上传到源存储库(例如) CodeCommit,这样源操作才能提供构件。使用文本编辑器创建该文件,然后命名该文件或使用默认 imageDetail.json 文件名。将 imageDetail.json 文件推送至您的源存储库。

    2. 如果您的管道包括构建阶段,请执行以下操作:

      1. 在生成规范文件中添加一个命令,以便在生成阶段在源存储库中输出映像定义文件。以下示例使用 printf 命令创建 imageDetail.json 文件。可以在 buildspec.yml 文件的 post_build 部分中列出该命令:

        printf '{"ImageURI":"image_URI"}' > imageDetail.json

        您必须包含 imageDetail.json 文件作为 buildspec.yml 文件中的输出构件。

      2. 添加 imageDetail.json 作为 buildspec.yml 文件中的构件文件。

        artifacts: files: - imageDetail.json