gpt4 book ai didi

YAML 合并级别

转载 作者:行者123 更新时间:2023-12-04 16:46:51 25 4
gpt4 key购买 nike

我们有一个包含重复部分的 gitlab-ci yaml 文件。

test:client:
before_script:
- node -v
- yarn install
cache:
untracked: true
key: client
paths:
- node_modules/
script:
- npm test

build:client:
before_script:
- node -v
- yarn install
cache:
untracked: true
key: client
paths:
- node_modules/
policy: pull
script:
- npm build

我想知道,通过合并语法,我是否可以提取公共(public)部分以在这两个部分的上下文中有效地重用它。

.node_install_common: &node_install_common
before_script:
- node -v
- yarn install
cache:
untracked: true
key: client
paths:
- node_modules/

但真正的问题是:我必须在哪个缩进级别合并 block 以确保策略:将拉取应用于缓存部分。我试图这样做:

test:client:
<<: *node_install_common
script:
- npm test

test:build:
<<: *node_install_common
policy: pull
script:
- npm build

但我收到一个无效的 yaml 错误。如何缩进以获得正确的合并行为?

最佳答案

请注意,合并键不是 YAML 规范的一部分,因此不能保证有效。它们还为过时的 YAML 1.1 版本指定,并且尚未针对当前的 YAML 1.2 版本进行更新。我们打算在即将发布的 YAML 1.3 中明确删除合并键(并可能提供更好的替代方案)。

话虽如此:没有合并语法。合并键 <<必须像映射中的普通键一样放置。这意味着该键必须与其他键具有相同的缩进。所以这是有效的:

test:client:
<<: *node_install_common
script:
- npm test

虽然不是这样:

test:build:
<<: *node_install_common
policy: pull
script:
- npm build

请注意,与您的代码相比,我添加了 :test:clienttest:build行。

现在 merge 指定将引用映射的所有键值对放入当前映射如果它们不存在于当前映射中。这意味着您不能随心所欲地替换子树中更深的值 - 合并不支持子树的部分替换。但是,您可以多次使用合并:

.node_install_common: &node_install_common
before_script:
- node -v
- yarn install
cache: &cache_common
untracked: true
key: client
paths:
- node_modules/

test:client:
<<: *node_install_common
script:
- npm test

test:build:
<<: *node_install_common
cache: # define an own cache mapping instead of letting merge place
# its version here (which could not be modified)
<<: *cache_common # load the common cache content
policy: pull # ... and place your additional key-value pair
script:
- npm build

关于YAML 合并级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com