首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在将{ .Environment.SOME_VAR }} (使用SOME_VAR设置)内插到缓存键时,获得"<no SOME_VAR“以外的其他信息?

如何在将{ .Environment.SOME_VAR }} (使用SOME_VAR设置)内插到缓存键时,获得"<no SOME_VAR“以外的其他信息?
EN

DevOps用户
提问于 2019-09-11 16:23:32
回答 1查看 850关注 0票数 2

使用此配置:

代码语言:javascript
运行
复制
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说,缓存密钥支持以这种方式插值环境变量。

到底怎么回事?如何使用缓存键中环境变量的值?

EN

回答 1

DevOps用户

回答已采纳

发布于 2019-09-16 14:12:48

更仔细地阅读有关在缓存键中使用环境变量的文档揭示了这个问题(重点是我的问题):

环境变量variableName (支持由CircleCI导出或添加到特定上下文中的任何环境变量--而不是任何任意环境变量)。

“由CircleCI导出”似乎意味着大多数-CIRCLE_...-prefixed变量(记录为"内建环境变量")的列表,而(不受支持的)“任意环境变量”包括在config.yml中的environment部分中设置的变量。

最后,我解决了这个限制,就像这样:

代码语言:javascript
运行
复制
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值,而是先将该环境变量的值写入文件,然后使用该文件的校验和构造缓存键。在缓存密钥中使用的计算文件校验和得到了很好的支持,因此这会产生一个从环境变量的值派生的缓存键。键不包含环境变量的值,但是由于键的唯一用途是对某些唯一的输入是唯一的,所以使用校验和也同样有效。

票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/9147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档