# 通过代码缓存方式实现构建加速
代码缓存是指通过一致性HASH、分布式文件存储、增量更新等技术，通过构建时代码下载效率的提升，从而实现构建加速。
#### 约束与限制
- 仅代码化构建可使用代码缓存构建加速。
- 构建缓存只提供文件缓存的上传和下载检出功能，支持用户自定义脚本更新。
- 该功能目前仅支持"华北-北京四"区域、代码源为CodeArts Repo的C/C++语言构建工程的编译构建加速。
- 使用代码缓存加速需购买配套加速特性包，购买方法请参考[购买构建加速包](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0001.html#codeci_ug_0001__section149572025115515)。
 
#### YAML文件配置方法
参考[创建代码化构建使用的YAML文件](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0058.html#codeci_ug_0058__section72391847131511)，在env中配置如下示例代码。
```
params: # 构建参数，可在构建过程中引用
- name: CLOUD_BUILD_UPLOAD_FLAG  # 参数为有值和为空两种状态，可控制跳过缓存上传至文件服务器
  value: true
- name: CLOUD_BUILD_REMOTE_CACHE # 参数为有值和为空两种状态，可控制会从其他执行机获取缓存
  value: true
env：
  cache: # 使用代码缓存
    - type:code #必填，使用缓存开关
      local_path:code # 必填，代码在构建执行机上存放的相对路径
      command:dos2unix build.sh && sh build.sh # 必填
      branch:master # 选填，分支名，可自定义，与url一起确定缓存标签
      url:git@codehub.devcloud.example.example.com:test/python3.git # 选填，可自定义，与branch一起确定缓存标签
```
表1配置参数表 
| **参数项**                    | **参数类型** | **描述**                                                                                                  | **是否必填** |
|:---|:---|:---|:---|
| CLOUD_BUILD_UPLOAD_FLAG | String   | 用于控制是否跳过缓存上传文件服务器。 True：是。 为空：否。 | 否        |
| CLOUD_BUILD_REMOTE_CACHE  | String   | 用于控制是否从其他执行机获取缓存。 True：是。 为空：否。      | 否        |
| type                    | String  | 使用缓存开关。                                                                                              | 是      |
| local_path                 | String   | 代码在构建执行机上存放的相对路径。                                                                                      | 是         |
| command                   | String   | 运行下载/更新代码的脚本命令。                                                                                         | 是        |
| branch                     | String    | 分支名，可自定义，与url一起确定缓存标签。                                                                                | 是          |
| url                       | String     | 链接，可自定义，与branch一起确定缓存标签。                                                                              | 是       |
   
#### 工作模式介绍
1. 代码缓存下载。本地没有缓存的情况下，从服务器下载缓存代码到本地；有缓存的情况下，使用本地缓存并还原目录结构。
2. 代码缓存更新。代码检出有变化时，会增量扫描目录树，缓存差异文件和目录树，加速下次构建缓存效率。 
   
 
#### 效果示例
在缓存盘有缓存的情况下，200万个文件（190G）还原时间在2到3分钟（仅供参考，实际效率受执行机规格、负载等影响）。
