缓存设置

更新时间:
复制 MD 格式

本文主要介绍了流水线缓存设置及清理功能

Flow 流水线每个任务节点都会创建新的构建环境,并在构建完后销毁。为解决依赖反复下载的问题,Flow 提供了缓存功能,用户可自定义缓存目录,实现任务多次运行的缓存共享。

例如:在 Node.js 构建任务执行npm install时,会在项目中生成./node_modules,而缓存在/root/.npm中,可以将/root/.npm保存起来方便下次加速下载。

设置缓存目录

在流水线编辑页, 选择,您可在此页面设置缓存目录

重要

Flow 主要解决任务多次运行间的依赖下载问题,不支持同一次运行中任务间的缓存共享。

  • Flow 默认缓存以下目录,可按需开启/关闭默认缓存目录,按需修改缓存目录。

    管理工具

    缓存目录

    Maven

    /root/.m2

    Gradle

    /root/.gradle/caches

    NPM

    /root/.npm

    yarn

    /root/.yarn

    go mod

    /go/pkg/mod

    其他缓存

    /root/.cache

  • 支持添加自定义缓存目录,自定义缓存目录需满足以下规则:

    • 不允许填写//root/root/workspace及其子目录。

      如需缓存/root/workspace下的某个目录或文件,可以将其复制到/root下其他目录并设置为缓存目录。

      示例如下:

      流程配置页签中,选择执行命令步骤,在命令编辑区①中输入以下脚本,将项目目录中生成的文件拷贝至缓存目录 /root/cpj

      cd /root/cpj
      ls
      cd ${PROJECT_DIR}
      echo "aaa" > a.txt
      cp ${PROJECT_DIR}/a.txt /root/cpj

      缓存目录列表中包含以下路径,所有条目的是否开启开关均已打开:

      • /root/.m2

      • /root/.gradle/caches

      • /root/.npm

      • /root/.yarn

      • /go/pkg/mod

      • /root/.cache

      • /root/cpj(自定义添加的缓存路径)

      私有构建集群缓存配置选择本地缓存(所有依赖文件均会存储在私有构建集群上)

      第二次运行流水线时,执行命令步骤日志显示,通过 cd /root/cpjls 命令可以看到 a.txt 已存在于缓存目录中,证明自定义缓存生效。

      [executionStep begins at 2022-04-18 10:59:44]
      [INFO] PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin
      [10:59:44] [SUCCESS] 获取 Credential 成功
      [10:59:44] [WARNING] 未指定工作路径,使用默认路径/root/workspace/code
      [10:59:44] [INFO] 执行步骤
      [10:59:44] [INFO] PIPELINE_ID=1731311
      [10:59:44] [INFO] PIPELINE_NAME=自定义缓存流水线
      [10:59:44] [INFO] BUILD_NUMBER=2
      [10:59:44] [INFO] EMPLOYEE_ID=5e71d6f503283833284f91c2
      [10:59:44] [INFO] WORK_SPACE=/root/workspace
      [10:59:44] [INFO] PROJECT_DIR=/root/workspace/code
      [10:59:44] [INFO] PLUGIN_DIR=/root/plugins
      [10:59:44] [INFO] BUILD_JOB_ID=53832096
      [10:59:44] [INFO] 准备环境执行上下文准备
      [10:59:44] [INFO] 执行用户命令
      [10:59:44] [User Command] + cd /root/cpj
      [10:59:44] [User Command] + ls
      [10:59:44] a.txt
      [10:59:44] [User Command] + cd /root/workspace/code
      [10:59:44] [User Command] + echo aaa
      [10:59:44] [User Command] + cp /root/workspace/code/a.txt /root/cpj
      [10:59:44] [SUCCESS] 步骤运行成功
    • 不允许包含..,例如/root/abc/..为非法文件目录。

    • 必须为合法文件目录,例如/root/%\&dfaf为非法文件目录。

构建任务使用缓存

缓存目录设置好后,流水线执行时可以使用相应构建命令参数指定是否优先使用缓存。

  • npm 构建时,使用以下命令安装依赖包,优先从本地缓存获取依赖包

    // 构建中优先使用缓存中
    npm install --prefer-offline --no-audit
  • yarn 构建时,使用以下命令安装依赖包,优先从本地缓存获取依赖包

    // 构建中优先使用缓存中
    yarn install --prefer-offline

私有构建集群缓存配置

公共构建集群的依赖缓存存储在云端,每次构建需从云端拉取。使用私有构建集群时,您可以选择以下两种缓存方式:

  • 本地缓存:依赖文件存储在私有构建集群上,直接使用本地缓存,解决网络问题导致的构建缓慢。

  • 云效托管缓存:每次构建下载云端缓存文件,适用于多个构建机的集群,重复利用缓存依赖文件。

私有构建机缓存清理

私有构建集群运行一段时间后,会产生大量缓存文件,需要定期清理以防磁盘打满导致流水线失败。

云效提供缓存清理工具,针对私有构建机的以下内容进行清理:

  • 基础环境清理:

    • 清理已停止容器。

    • 清理悬空无tag镜像。

    • 清理自定义环境构建产生的中间镜像。

  • 清理目录/root/yunxiao/*/runner/

    • 3天前的构建任务运行日志。

    • 3天前的构建任务步骤日志。

    • 15天未更新的构建任务缓存目录。

清理工具执行命令如下:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /root/yunxiao:/root/yunxiao registry.cn-beijing.aliyuncs.com/build-steps/cache-cleaner:0.0.3-20230914183240
您可将以上命令配置到cronjob中以定期清理缓存。