在 AWS CodeBuild 中构建缓存
构建项目时,可以使用缓存来节省时间。缓存可以存储构建环境的可重用部分,并在多个构建中使用它们。您的构建项目可以使用两种缓存类型中的一种:Amazon S3 或本地。如果使用本地缓存,则必须选择三种缓存模式中的一种或多种:源缓存、Docker 层缓存和自定义缓存。
Docker 层缓存模式仅适用于 Linux 环境。如果选择此模式,则必须在特权模式下运行构建。被授予特权模式的 CodeBuild 项目会向所有设备授予其容器访问权限。有关更多信息,请参阅
Docker 文档网站上的运行时权限和 Linux 功能
主题
Amazon S3 缓存
Amazon S3 缓存将缓存存储在跨多个构建主机可用的 Amazon S3 存储桶中。对于构建成本高于下载成本的中小型构建构件,这是一个很好的选择。这不是大型构建构件的最佳选择,因为它们可能需要很长时间才能通过网络传输,这会影响构建性能。如果您使用 Docker 图层,它也不是最好的选择。
本地缓存
本地缓存将缓存本地存储在构建主机上,并且仅可用于该构建主机。对于中型到大型构建构件,这是一个很好的选择,因为构建主机上立即提供缓存。如果您不经常构建,这不是最好的选择。这意味着构建性能不受网络传输时间的影响。如果您选择本地缓存,则必须选择以下一个或多个缓存模式:
-
源缓存模式用于缓存主要和辅助源的 Git 元数据。创建缓存后,后续构建仅提取两次提交之间发生的更改。对于具有干净工作目录和源为大型 Git 存储库的项目,此模式是一个不错的选择。如果选择此选项并且项目不使用 Git 存储库(GitHub、GitHub Enterprise Server 或 Bitbucket),则此选项将被忽略。
-
Docker 层缓存模式缓存现有 Docker 层。对于构建或提取大型 Docker 映像的项目,此模式是一个不错的选择。它可以防止因从网络中提取大型 Docker 映像而导致的性能问题。
注意 -
您只能在 Linux 环境中使用 Docker 层缓存。
-
必须设置
privileged
标志以使您的项目具有所需的 Docker 权限。注意 By default, Docker containers do not allow access to any devices. Privileged mode grants a build project's Docker container access to all devices. For more information, see Runtime Privilege and Linux Capabilities
on the Docker Docs website. -
在使用 Docker 层缓存之前,您应考虑安全影响。
-
-
自定义缓存模式用于缓存您在构建规格文件中指定的目录。如果您的构建方案不适合另外两种本地缓存模式之一,则此模式是一个不错的选择。如果您使用自定义缓存:
-
只能指定目录进行缓存。不能指定单独的文件。
-
用于引用缓存目录的符号链接。
-
缓存目录在下载项目源代码之前链接到您的构建。如果缓存项目具有相同的名称,则它们会覆盖源项目。使用 buildspec 文件中的缓存路径指定目录。有关更多信息,请参阅构建规范语法。
-
避免在源和缓存中使用相同的目录名称。本地缓存的目录可能会覆盖或删除源存储库中具有相同名称的目录。
-
The ARM_CONTAINER
and LINUX_GPU_CONTAINER
environment types and the BUILD_GENERAL1_2XLARGE
compute type do not support the use of a local cache.有关更多信息,请参阅构建环境计算类型。
您可以使用 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 S3 或 Local (本地)。如果您选择 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:4.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
By default, Docker containers
do not allow access to any devices. Privileged mode grants a build project's Docker
container access to all devices. For more information, see
Runtime Privilege and
Linux Capabilities
有关更多信息,请参阅创建构建项目 (AWS CloudFormation)。