

亚马逊 CodeCatalyst 不再向新买家开放。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [如何从中迁移 CodeCatalyst](migration.md)。

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

# 在工作流运行之间缓存文件
<a name="workflows-caching"></a>

启用文件缓存后，生成和测试操作会将磁盘上的文件保存到缓存中，并在后续的工作流运行中从缓存中恢复这些文件。缓存可以减少因构建或下载两次运行之间未更改的依赖项而导致的延迟。 CodeCatalyst 还支持后备缓存，可用于还原包含一些所需依赖项的部分缓存。这有助于减少缓存未命中造成的延迟影响。

**注意**  
文件缓存仅在 Amazon CodeCatalyst [构建](build-workflow-actions.md)和[测试](test-workflow-actions.md)操作中可用，并且仅在配置为使用**EC2**[计算类型](workflows-working-compute.md#compute.types)时才可用。

**Topics**
+ [关于文件缓存](#workflows-caching.files)
+ [创建缓存](#workflows-caching.fallback)
+ [文件缓存限制](#workflows-caching.constraints)

## 关于文件缓存
<a name="workflows-caching.files"></a>

文件缓存让您可以将数据组织到多个缓存中，每个缓存都在 `FileCaching` 属性下引用。每个缓存都会保存在给定路径指定的目录中。指定的目录将在未来的工作流运行中恢复。以下是使用名为 `cacheKey1` 和 `cacheKey2` 的多个缓存进行缓存的 YAML 代码片段示例。

```
Actions:
  BuildMyNpmApp:
    Identifier: aws/build@v1
    Inputs:
      Sources:
        - WorkflowSource
    Configuration:
      Steps:
        - Run: npm install
        - Run: npm run test
    Caching:
      FileCaching:
        cacheKey1:
          Path: file1.txt
          RestoreKeys:
             - restoreKey1
        cacheKey2:
          Path: /root/repository
          RestoreKeys:
             - restoreKey2
             - restoreKey3
```

**注意**  
CodeCatalyst 使用多层缓存，由本地缓存和远程缓存组成。当预置实例集或按需计算机在本地缓存中遇到缓存未命中的情况时，将从远程缓存中恢复依赖项。因此，某些操作运行可能会因下载远程缓存而出现延迟。

CodeCatalyst 应用缓存访问限制，以确保一个工作流程中的操作无法修改其他工作流程中的缓存。这样可以防止各个工作流收到其他工作流中可能推送的错误数据，影响其构建或部署。限制是通过缓存范围来强制执行的，该范围将缓存隔离到每个工作流和分支对。例如，分支 `feature-A` 中的 `workflow-A` 与同级分支 `feature-B` 中的 `workflow-A` 具有不同的文件缓存。

当工作流查找指定的文件缓存但无法找到时，就会发生缓存未命中。出现这种情况可能有多种原因，例如创建了新分支或引用了新缓存但新缓存尚未创建时。这种情况也可能发生在缓存过期时，默认情况下，缓存在上次使用的 14 天后过期。为了减少缓存未命中率并提高缓存命中率， CodeCatalyst 支持后备缓存。回退缓存是备用缓存，它提供了恢复部分缓存的机会，部分缓存可能是某个缓存的较旧版本。在恢复缓存时，首先在 `FileCaching` 下搜索属性名称的匹配，如果未找到，则评估 `RestoreKeys`。如果属性名称和所有 `RestoreKeys` 均出现缓存未命中，则工作流将继续运行，因为缓存是尽力提供服务，并不提供保证。

## 创建缓存
<a name="workflows-caching.fallback"></a>

您可以按照以下说明向工作流添加缓存。

------
#### [ Visual ]

**使用可视化编辑器添加缓存**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择**可视化**。

1. 在工作流图表中，选择要添加缓存的操作。

1. 选择**配置**。

1. 在**文件缓存 – 可选**下，选择**添加缓存**，然后在字段中输入信息，如下所示：

    **键** 

   指定主缓存属性的名称。缓存属性名称在您的工作流内必须是唯一的。每个操作在 `FileCaching` 中最多可以有五个条目。

    **路径** 

   为您的缓存指定关联路径。

    **恢复键 – 可选** 

   指定在找不到主缓存属性时用作回退手段的恢复键。恢复键名称在您的工作流内必须是唯一的。每个缓存在 `RestoreKeys` 中最多可以有五个条目。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------
#### [ YAML ]

**使用 YAML 编辑器添加缓存**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择 **YAML**。

1. 在工作流操作中，添加类似于下文的代码：

   ```
   action-name:
     Configuration:
       Steps: ...
     Caching:
       FileCaching:
         key-name:
           Path: file-path
           # # Specify any additional fallback caches
           # RestoreKeys:
           #  - restore-key
   ```

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------

## 文件缓存限制
<a name="workflows-caching.constraints"></a>

以下是属性名称和 `RestoreKeys` 的限制：
+ 名称在工作流中必须唯一。
+ 名称仅限字母数字字符（a-z、A-Z、0-9）、连字符（-）和下划线（\$1）。
+ 名称最多可以包含 180 个字符。
+ 每个操作在 `FileCaching` 中最多可以有五个缓存。
+ 每个缓存在 `RestoreKeys` 中最多可以有五个条目。

以下是路径的限制：
+ 不允许使用星号（\$1）。
+ 路径最多可以包含 255 个字符。