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

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

Amazon S3 缓存

Amazon S3 缓存将缓存存储在跨多个构建主机可用的 Amazon S3 存储桶中。对于构建成本高于下载成本的中小型构建构件,这是一个很好的选择。

要在版本中使用 Amazon S3,您可以为要缓存的文件指定路径buildspec.yml。 CodeBuild 将自动存储缓存并将其更新到项目中配置的 Amazon S3 位置。如果您不指定文件路径, CodeBuild 将尽最大努力缓存公共语言依赖关系以帮助您加快构建速度。您可以在构建日志中查看缓存详细信息。

此外,如果您想拥有多个版本的缓存,可以在中定义缓存密钥buildspec.yml。 CodeBuild 将缓存存储在此缓存密钥的上下文中,并创建一个创建后不会更新的唯一缓存副本。缓存密钥也可以跨项目共享。动态密钥、缓存版本控制和跨版本共享缓存等功能只有在指定密钥时才可用。

要了解有关 buildspec 文件中缓存语法的更多信息,请参阅 buildspec 参考cache中的。

生成动态密钥

缓存密钥可以包含 shell 命令和环境变量以使其独一无二,从而在密钥更改时自动更新缓存。例如,您可以使用package-lock.json文件的哈希值来定义密钥。当该文件中的依赖关系发生变化时,哈希值以及缓存密钥会发生变化,从而触发新缓存的自动创建。

cache: key: npm-key-$(codebuild-hash-files package-lock.json)

CodeBuild 将评估表达式$(codebuild-hash-files package-lock.json)以获得最终密钥:

npm-key-abc123

您也可以使用环境变量定义缓存密钥,例如CODEBUILD_RESOLVED_SOURCE_VERSION。这样可以确保每当你的源代码发生变化时,都会生成一个新的密钥,从而自动保存一个新的缓存:

cache: key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION

CodeBuild 将计算表达式并获得最终的密钥:

npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369

codebuild-hash-files

codebuild-hash-files是一个 CLI 工具,它使用全局模式计算 CodeBuild 源目录中一组文件的 SHA-256 哈希值:

codebuild-hash-files <glob-pattern-1> <glob-pattern-2> ...

以下是一些使用示例codebuild-hash-files

codebuild-hash-files package-lock.json codebuild-hash-files '**/*.md'

缓存版本

缓存版本是根据正在缓存的目录的路径生成的哈希值。如果两个缓存的版本不同,则在匹配过程中它们将被视为不同的缓存。例如,以下两个缓存被认为是不同的,因为它们引用的路径不同:

version: 0.2 phases: build: commands: - pip install pandas==2.2.3 --target pip-dependencies cache: key: pip-dependencies paths: - "pip-dependencies/**/*"
version: 0.2 phases: build: commands: - pip install pandas==2.2.3 --target tmp/pip-dependencies cache: key: pip-dependencies paths: - "tmp/pip-dependencies/**/*"

项目之间的缓存共享

您可以使用该cache部分下cacheNamespace的 API 字段在多个项目之间共享缓存。此字段定义了缓存的范围。要共享缓存,必须执行以下操作:

  • 用同样的东西cacheNamespace

  • 指定相同的缓存key

  • 定义相同的缓存路径。

  • 使用相同的 Amazon S3 存储桶(pathPrefix如果已设置)。

这样可以确保一致性并允许跨项目共享缓存。

指定缓存命名空间(控制台)

  1. https://console.aws.amazon.com/codesuite/codebuild /home 中打开 Amazon CodeBuild 控制台。

  2. 选择创建项目。有关更多信息,请参阅 创建构建项目(控制台)运行构建(控制台)

  3. 构件中,选择其他配置

  4. 对于缓存类型,请选择 Amazon S3

  5. 对于 “缓存命名空间-可选”,输入命名空间值。

    CodeBuild 控制台中的缓存命名空间参数。
  6. 继续使用默认值,然后选择创建构建项目

指定缓存命名空间 (Amazon CLI)

您可以使用中的--cache参数 Amazon CLI 来指定缓存命名空间。

--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'

构建规范示例

以下是几个常见语言的 buildspec 示例:

缓存 Node.js 依赖关系

如果您的项目包含一个package-lock.json文件并npm用于管理 Node.js 依赖项,则以下示例说明如何设置缓存。默认情况下,npm会将依赖项安装到node_modules目录中。

version: 0.2 phases: build: commands: - npm install cache: key: npm-$(codebuild-hash-files package-lock.json) paths: - "node_modules/**/*"

缓存 Python 依赖关系

如果您的项目包含一个requirements.txt文件并使用 pip 来管理 Python 依赖项,则以下示例演示如何配置缓存。默认情况下,pip 会将软件包安装到系统的site-packages目录中。

version: 0.2 phases: build: commands: - pip install -r requirements.txt cache: key: python-$(codebuild-hash-files requirements.txt) paths: - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"

此外,您可以将依赖项安装到特定目录中,并为该目录配置缓存。

version: 0.2 phases: build: commands: - pip install -r requirements.txt --target python-dependencies cache: key: python-$(codebuild-hash-files requirements.txt) paths: - "python-dependencies/**/*"

缓存 Ruby 依赖关系

如果您的项目包含一个用于Bundler管理 Gem 依赖关系的Gemfile.lock文件,则以下示例演示了如何有效地配置缓存。

version: 0.2 phases: build: commands: - bundle install --path vendor/bundle cache: key: ruby-$(codebuild-hash-files Gemfile.lock) paths: - "vendor/bundle/**/*"

缓存 Go 依赖关系

如果您的项目包含go.sum文件并使用 Go 模块来管理依赖关系,则以下示例演示如何配置缓存。默认情况下,Go 模块被下载并存储在${GOPATH}/pkg/mod目录中。

version: 0.2 phases: build: commands: - go mod download cache: key: go-$(codebuild-hash-files go.sum) paths: - "/go/pkg/mod/**/*"