Logo
Section 1 / 2

加速 CI/CD

缓存用于加速 CI/CD。让我们在本课中学习如何使用缓存。

导入

加速 CI/CD

缓存用于加速 CI/CD。让我们在本课中学习如何使用缓存。

你目前已经定义了两个 GitHub 工作流。对于每个新服务,你将引入一个新的工作流,以真正实现服务之间的独立性。当仅有一个服务发生变化时,这也能显著加快 CI/CD 流水线的速度。当拉取请求合并到 master 分支时,工作流文件会按顺序为指定服务执行两个任务:

  • test
  • deploy

这两个任务首先安装根目录的 NPM 包,然后安装所有服务的所有 NPM 包。当我们处理拉取请求并频繁推送更改时,这种重复性操作非常耗时,整个工作流运行大约需要 5 分钟。随着我们可能添加更多步骤或安装新的 NPM 模块,这个时间只会越来越长。

利用缓存

我们可以利用 缓存 显著提升流程速度!点击 Run 并开始创建一个新分支:

1git switch -c speed-up-CI-CD

我们只需要在两个工作流配置中,每个任务的 actions/checkout@v2 步骤之后添加以下步骤即可。

1- name: Restore dependencies 2 id: cache 3 uses: actions/cache@master 4 with: 5 path: | 6 node_modules 7 */*/node_modules 8 */*/*/node_modules 9 */*/*/*/node_modules 10 key: ${{ runner.os }}-${{hashFiles('**/package-lock.json')}}

只要任意一个 package-lock.json 文件没有变化,我们就会使用缓存的 node_modules 目录,每个工作流步骤可节省约 60 秒。随着我们添加更多服务,node_modules 目录中的 NPM 包越来越多,节省的时间也会持续增加。

首先,关于上面带有 * 的三个 node_modules 路径。这是为了覆盖以下目录:

  • services/web/node_modules
  • services/web/firebase/node_modules
  • services/web/firebase/functions/node_modules

通过更多优化,可以进一步提高效率,但上述方式已经是一个合理且有效的起点,足以展示缓存的能力。

使用缓存变量

此缓存步骤会输出一个变量,告诉我们缓存是否命中。如果命中缓存,我们可以跳过接下来的两个步骤:

  • 安装依赖
  • 启动所有服务

要配置这一点,请更新两个工作流配置文件 services-web-firebase-functions-src-firestoreposts-on-create-cross-post-to-devto.yml 和 services-web.yml 中的上述两个步骤,使其匹配如下内容:

1- name: Install dependencies 2 if: steps.cache.outputs.cache-hit != 'true' 3 run: npm install 4- name: Bootstrap all services 5 if: steps.cache.outputs.cache-hit != 'true' 6 run: npm run bootstrap

点击 Run 保存更改。

No configuration found for ID: 916a84594e915182c4cc44c76b7e88440bedecb5835c45b1fdd38c25d35c6065

PRESS RUN 将代码推送到 GitHub。

No configuration found for ID: 258e8b21ffd0dbb01e545271ee802454f2dd0e373a3cf0e40ffa594935b721ea

前往你的 GitHub 仓库,为 speed-up-CI-CD 分支创建并合并拉取请求。如需帮助,请参考课程中关于创建拉取请求的课时。

基于事件触发服务

连接自定义域名