前言
众所周知,CircleCI的缓存是不可变的(immutable),如果不跟后缀保存缓存的话,会报错如下:
|
如何解决这样的错误,也就是如何更新现有的缓存,是一个急需解决的问题。
现状
在初始构建运行之后,有了缓存,未来的构建将运行得更快。
common case
|
CircleCI按照restore_cache
步骤中列出的键的顺序恢复缓存。每个缓存键都被命名为项目,并且检索是前缀匹配的。将从第一个匹配密钥恢复缓存。如果存在多个匹配项,则将使用最近生成的缓存。[1]
想法诞生
既然在恢复的时候,CircleCI有多个匹配项fallback机制,那我们只要在保存的时候用一些标识符区分开就行,恢复的时候,会fallback到不带后缀的缓存名
的那个缓存。
简单来说就是:
这样保存
|
这样恢复
|
它会直接恢复上一次保存的那个带后缀的版本。
其他可用后缀
模板 | 描述 |
---|---|
{{ .Branch }} |
正在构建中的VCS分支名 |
{{ .BuildNum }} |
此构建的CircleCI作业编号 |
{{ .Revision }} |
目前正在构建VCS修订版本号 |
{{ .Environment.variableName }} |
环境变量variableName |
{{ checksum "filename" }} |
给定文件名内容的base64编码SHA256哈希,考虑使用依赖性清单,例如package-lock.json ,pom.xml 或project.clj 。 |
{{ epoch }} |
自00:00:00 UTC 以来经过的秒数 |
{{ arch }} |
OS和CPU信息 |
构建截图
完整示例
|
参考资料
caching dependencies https://circleci.com/docs/2.0/caching/ ↩︎