如何从命令行验证 YAML 文件?

我有问题从 YAML 配置文件拉:

致命错误: 当解析块映射时; 预期 < 块结束 > ,但找到了块条目

虽然有很多在线 YAML 验证器,我已经尝试过并帮助过它们,但是我想从命令行验证我的 YAML 文件,并将其集成到我的持续集成管道中。

149993 次浏览

假设您在正在使用的服务器上安装了 perl,并且它具有一些基本的 YAML 工具,那么您可以使用..。

perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")'

应该注意的是,这将是严格的解释文件,但有用的。

对于基本的 Ruby 安装,这个应该可以工作:

ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml

Python 版本(thx@Murphy) :

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml

或者交替安装(免费) Eclipse IDE 和 yEdit yaml 编辑器,查看带有语法突显、错误标志和大纲视图的 yaml。一次性安装成本对我来说相当不错。

你可以用 Yamllint。可以在家酿等。它既可以用于语法验证,也可以用于链接。

为了更正您的 .yaml文件,我推荐使用 yamllint 工具。它可以很容易地从本地控制台启动。

yamllint软件包适用于所有主要操作系统。

它可以从系统的包源安装(例如 sudo apt-get install yamllint)。 请参阅有关快速启动和安装的文档。

如果您的环境中没有安装解释器,但仍然有一个 卷发,那么您可以使用在线线程项目,如 林特三部曲:

curl -X POST  --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json

它提供验证结果,包括错误描述(如果有的话)作为 json 或 csv,如果足够的话,作为纯文本 没错假的

还有码头档案。因此,如果您经常需要一个基于 REST 的行程(可能是在 CI/CD 管道中) ,那么在您的站点上托管一个自己的实例可能会很方便。

我更喜欢的方式是 yamllint -d "{extends: default, rules: {quoted-strings: enable}}" .

因为我真的想抓住引用错误, 例如 validate: bash -c ' ' \""

这是有效的 yaml,因为 yaml 只引用字符串并将其转换为: validate: "bash -c ' ' \\\"\""

虽然在 valid命令的开头明显缺少一个引号。

所以普通 yamllint 检查器不会检测到这一点,yamllint 甚至不会在它的默认配置中检测到这一点,所以打开引号字符串检查器。