使用此配置:
version: 2
jobs:
test:
docker:
- image: nixorg/nix:circleci
environment:
NIXPKGS_REV: 3c83ad6ac13b67101cc3e2e07781963a010c1624
steps:
- restore_cache:
name: Restore Nix Store Paths
keys:
- paymentserver-nix-store-v1-{{ .Environment.NIXPKGS_REV }}
- paymentserver-nix-store-v1-作业尝试使用键paymentserver-nix-store-v1-<no value>还原缓存。
https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-job说这是设置环境变量的正确方法。https://circleci.com/docs/2.0/caching/#using-keys-and-templates说,缓存密钥支持以这种方式插值环境变量。
到底怎么回事?如何使用缓存键中环境变量的值?
发布于 2019-09-16 14:12:48
更仔细地阅读有关在缓存键中使用环境变量的文档揭示了这个问题(重点是我的问题):
环境变量variableName (支持由CircleCI导出或添加到特定上下文中的任何环境变量--而不是任何任意环境变量)。
“由CircleCI导出”似乎意味着大多数-CIRCLE_...-prefixed变量(记录为"内建环境变量")的列表,而(不受支持的)“任意环境变量”包括在config.yml中的environment部分中设置的变量。
最后,我解决了这个限制,就像这样:
jobs:
build:
docker:
- image: "nixorg/nix:circleci"
environment:
NIXPKGS_REV: "3c83ad6ac13b67101cc3e2e07781963a010c1624"
steps:
- "run":
name: "Prepare For Cache Key"
command: |
echo "${NIXPKGS_REV}" > nixpkgs.rev
- restore_cache:
name: "Restore Nix Store Paths"
keys:
- paymentserver-nix-store-v1-{{ checksum "nixpkgs.rev" }}
- paymentserver-nix-store-v1-也就是说,不尝试使用缓存键中环境中的NIXPKGS_REV值,而是先将该环境变量的值写入文件,然后使用该文件的校验和构造缓存键。在缓存密钥中使用的计算文件校验和得到了很好的支持,因此这会产生一个从环境变量的值派生的缓存键。键不包含环境变量的值,但是由于键的唯一用途是对某些唯一的输入是唯一的,所以使用校验和也同样有效。
https://devops.stackexchange.com/questions/9147
复制相似问题