在 Amazon CodeBuild 中构建缓存 - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon CodeBuild 中构建缓存

构建项目时,可以使用缓存来节省时间。缓存可以存储构建环境的可重用部分,并在多个构建中使用它们。您的构建项目可以使用两种缓存类型中的一种:Amazon S3 或本地。如果使用本地缓存,则必须选择三种缓存模式中的一种或多种:源缓存、Docker 层缓存和自定义缓存。

注意

Docker 层缓存模式仅适用于 Linux 环境。如果选择此模式,则必须在特权模式下运行构建。 CodeBuild 被授予特权模式的项目授予其容器访问所有设备的权限。有关更多信息,请参阅 Docker 文档网站上的运行时权限和 Linux 功能

Amazon S3 缓存

Amazon S3 缓存将缓存存储在跨多个构建主机可用的 Amazon S3 存储桶中。对于构建成本高于下载成本的中小型构建工件,这是一个很好的选择。这不是大型构建构件的最佳选择,因为它们可能需要很长时间才能通过网络传输,这会影响构建性能。如果您使用 Docker 图层,它也不是最好的选择。

本地缓存

本地缓存将缓存本地存储在构建主机上,并且仅可用于该构建主机。对于大中型构建工件,这是一个很好的选择,因为构建主机上的缓存立即可用。如果您不经常构建,这不是最好的选择。这意味着构建性能不受网络传输时间的影响。

如果您选择本地缓存,则必须选择以下一个或多个缓存模式:

  • 源缓存模式用于缓存主要和辅助源的 Git 元数据。创建缓存后,后续构建仅拉取两次提交之间发生的更改。对于具有干净工作目录和源为大型 Git 存储库的项目,此模式是一个不错的选择。如果您选择此选项,并且您的项目不使用 Git 存储库(Amazon CodeCommit、 GitHub、E GitHub nterprise Server 或 Bitbucket),则该选项将被忽略。

  • Docker 层缓存模式缓存现有 Docker 层。对于构建或拉取大型 Docker 映像的项目,此模式是一个不错的选择。它可以防止因从网络中拉取大型 Docker 映像而导致的性能问题。

    注意
    • 您只能在 Linux 环境中使用 Docker 层缓存。

    • 必须设置 privileged 标志以使您的项目具有所需的 Docker 权限。

      默认情况下,非 VPC 版本启用 Docker 守护程序。如果您想使用 Docker 容器进行 VPC 构建,请参阅 Docker Docs 网站上的运行时权限和 Linux 功能并启用特权模式。此外,Windows 不支持特权模式。

    • 在使用 Docker 层缓存之前,您应考虑安全影响。

  • 自定义缓存模式用于缓存您在 buildspec 文件中指定的目录。如果您的构建方案不适合另外两种本地缓存模式之一,则此模式是一个不错的选择。如果您使用自定义缓存:

    • 只能指定目录进行缓存。不能指定单独的文件。

    • 用于引用缓存目录的符号链接。

    • 缓存目录在下载项目源代码之前链接到您的构建。如果缓存项目具有相同的名称,则它们会覆盖源项目。使用 buildspec 文件中的缓存路径指定目录。有关更多信息,请参阅buildspec 语法

    • 避免在源和缓存中使用相同的目录名称。本地缓存的目录可能会覆盖或删除源存储库中具有相同名称的目录。

注意

LINUX_GPU_CONTAINER 环境类型和 BUILD_GENERAL1_2XLARGE 计算类型不支持本地缓存。有关更多信息,请参阅构建环境计算模式和类型

注意

当您配置为使用 VPC 时 CodeBuild ,不支持本地缓存。有关将 VPC 与配合使用的更多信息 CodeBuild,请参阅将 Amazon CodeBuild 与 Amazon Virtual Private Cloud 结合使用

您可以使用 Amazon CLI、控制台、开发工具包或 Amazon CloudFormation 来指定本地缓存。

指定本地缓存 (CLI)

您可以使用 Amazon CLI 中的 --cache 参数指定三种本地缓存类型中的每一种。

  • 指定源缓存:

    --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  • 指定 Docker 层缓存:

    --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  • 指定自定义缓存:

    --cache type=LOCAL,mode=[LOCAL_CUSTOM_CACHE]

有关更多信息,请参阅创建构建项目 (Amazon CLI)

指定本地缓存(控制台)

您可以使用控制台的构件部分指定缓存。对于缓存类型,选择 Amazon S3本地。如果您选择本地,请选择三个本地缓存选项中的一个或多个。

有关更多信息,请参阅创建构建项目(控制台)

指定本地缓存 (Amazon CloudFormation)

如果您使用 Amazon CloudFormation 指定本地缓存,则在 Cache 属性上,对于 Type,应指定 LOCAL。以下 YAML 格式的示例 Amazon CloudFormation 代码指定所有三种本地缓存类型。您可以指定这些类型的任意组合。如果您使用 Docker 层缓存,在 Environment 下,您必须将 PrivilegedMode 设置为 true,将 Type 设置为 LINUX_CONTAINER

CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: MyProject ServiceRole: <service-role> Artifacts: Type: S3 Location: <bucket-name> Name: myArtifact EncryptionDisabled: true OverrideArtifactName: true Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:5.0 Certificate: <bucket/cert.zip> # PrivilegedMode must be true if you specify LOCAL_DOCKER_LAYER_CACHE PrivilegedMode: true Source: Type: GITHUB Location: <github-location> InsecureSsl: true GitCloneDepth: 1 ReportBuildStatus: false TimeoutInMinutes: 10 Cache: Type: LOCAL Modes: # You can specify one or more cache mode, - LOCAL_CUSTOM_CACHE - LOCAL_DOCKER_LAYER_CACHE - LOCAL_SOURCE_CACHE
注意

默认情况下,非 VPC 版本启用 Docker 守护程序。如果您想使用 Docker 容器进行 VPC 构建,请参阅 Docker Docs 网站上的运行时权限和 Linux 功能并启用特权模式。此外,Windows 不支持特权模式。

有关更多信息,请参阅 创建构建项目 (Amazon CloudFormation)