GitLab:如何在存在 yaml-checkers 的情况下使用 !reference 标签

GitLab: How to use !reference tag in the presence of yaml-checkers

我想在 GitLab 管道定义中使用 !reference 标签。

同时,我在 pre-commit 工具 (https://pre-commit.com/hooks.html) 中有像 check-yaml 这样的 yaml-checkers。例如,此检查器使用 ruamel.yaml python 包来加载 yaml 文件。该包然后沿着 "无法确定标记的构造函数".

的行抱怨

是否可以在我的管道中包含标签的定义以满足检查员的要求?否则,这使得 !reference 标签无法在我的几个项目中使用。

我无法确定在gitlab中如何使用ruamel.yaml,但是如果你能控制 ruamel.yaml.YAML() 实例是如何创建的,你应该确保它 使用默认的 typ(通过不指定它),或等效的(`typ='rt')。 这将允许加载(和转储)任何有效的标签,而无需 需要指定构造函数。该标签可用于两个集合 类型(映射、序列)以及大多数标量。

import sys
import ruamel.yaml

yaml_str = """\
- !reference {a: 1, b: 2}
- !reference [1, 2, 3]
- !reference "abc"
- !reference 3.14
"""

yaml = ruamel.yaml.YAML(typ='rt')
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)

给出:

- !reference {a: 1, b: 2}
- !reference [1, 2, 3]
- !reference "abc"
- !reference 3.14

!reference 是非标准扩展,因此您需要使用 --unsafe 选项

    -   id: check-yaml
        args: [--unsafe]