【发布时间】:2021-08-28 13:51:49
【问题描述】:
当我在 CircleCI 上运行以下作业时,缓存键在正在读取的缓存和正在写入的缓存之间神秘地变化。我能想到的唯一解释是我对 YAML 中的锚点和别名的理解是不正确的。
我正在使用 YAML anchor and alias 在读取缓存键时捕获它,然后在写入时将其读回。然而不知何故,这两个键是不同的(好像正在重新评估该行)。
commands:
npm_install:
description: Install and cache (cached) node modules
steps:
- restore_cache:
key: &NPM_CACHE_KEY v8-npm--{{ .Branch }}-{{arch}}-{{checksum "~/project/angular/package-lock.json"}}
- run:
name: Install Node modules
command: |
cd ~/project/angular
npm install ci
- save_cache:
key: *NPM_CACHE_KEY
paths:
- ~/project/angular/node_modules/
- /usr/local/bin/node_modules
- /home/circleci/.cache/
运行结果如下:
放大缓存键行可以看到缓存键不同。
# When reading the cache
v8-npm--add_angular_version_display-arch1-linux-amd64-6_85-IXQLtfeuATYKtD1dRoCJu_FbRnfhYZb1+XkVFRET5Pc=
---
#When writing the cache
v8-npm--add_angular_version_display-arch1-linux-amd64-6_85-0wC66hCG9ZcSN9wfW4NlpxQswHV+n4foEcQ15cWRxqg=
YAML 锚/别名方法是否保存插值或未插值的字符串?
撇开为什么package-lock.json 文件可能首先发生变化的问题不谈,还有另一个问题。为什么这两个键不同? YAML 是否被重新插值?
保存到&NPM_CACHE_KEY的内容是内插值,即v8-npm--add_angular_version_display-arch1-linux-amd64-6_85-IXQLtfeuATYKtD1dRoCJu_FbRnfhYZb1+XkVFRET5Pc=
或者...它是在保存 ``NPM_CACHE_KEY v8-npm--{{ .Branch }}-{{arch}}-{{checksum "~/project/angular/package-lock.json"}}`并重新评估第二次?
如果锚点/别名重新插入,那么什么不会?
如果锚点正在重新插值,那么我怎样才能让它简单地存储输出?
(我还有另一个问题,这就是为什么 package-lock 的哈希值正在改变,但这是一个单独的问题)
【问题讨论】:
-
npm install ci安装a package namedci,只是顺便安装了其他依赖项,因此更改了锁定文件;我想你的意思是npm ci。v8-npm--{{ .Branch }}-{{arch}}-{{checksum "~/project/angular/package-lock.json"}}正在由 CircleCI 填写,YAML 中的实际值包含占位符 - 通过例如运行它yamllint.com 看看它是如何扩展的。 -
@jonrsharpe 哇,ci 的好地方,这是一个明显的错误!你提出了一个非常好的观点,看看它是如何扩展的,我使用了 CircleCI 的
compiled视图,它实际上是在重新评估。