AWS CodeBuild
用户指南 (API 版本 2016-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 CodeBuild 中构建缓存

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

注意

Docker 层缓存模式仅适用于 Linux 环境。如果您选择此模式,则必须在特权模式下运行您的构建。

Amazon S3 缓存

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

本地缓存

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

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

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

    注意

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

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

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

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

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

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

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

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

指定本地缓存 (CLI)

您可以使用 AWS 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]

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

指定本地缓存(控制台)

您可以使用控制台的 Artifacts (构件) 部分指定缓存。对于 Cache type (缓存类型),选择 Amazon S3Local (本地)。如果您选择 Local (本地),请选择三个本地缓存选项中的一个或多个。下面显示了如何选择本地缓存。

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

指定本地缓存 (AWS CloudFormation)

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

CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: MyProject ServiceRole: service-role Artifacts: Type: S3 Location: myBucket Name: myArtifact EncryptionDisabled: true OverrideArtifactName: true Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:2.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

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