如何从命令行验证我的 YAML 文件?
Posted
技术标签:
【中文标题】如何从命令行验证我的 YAML 文件?【英文标题】:How do I validate my YAML file from command line? 【发布时间】:2011-04-27 16:11:40 【问题描述】:我在提取 YAML 配置文件时遇到问题:
致命错误:解析块映射时;预期
,但找到了 block entry
虽然有很多在线 YAML 验证器,我已经尝试过并提供了帮助,但我想从命令行验证我的 YAML 文件并将其集成到我的持续集成管道中。
如何在命令行上验证 YAML 文件的语法?
【问题讨论】:
试试:travis lint .travis.yml
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
这个问题不应该被关闭。也许将其重新命名为“如何从命令行验证我的 YAML 文件”。这是一个有效且有用的问题
Seconded @hanxue - 这是搜索主题时的第一个结果,当谷歌将我们带到这里时应该是一个有用的参考。
是的,这个问题不应该被关闭。我不认为答案是固执己见或垃圾邮件。
【参考方案1】:
通过基本的 Ruby 安装,这应该可以工作:
ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml
Python 版本(感谢 @Murphy):
pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml
【讨论】:
如果你从结尾删除puts y
,那么你会得到一个更标准的 UNIX 行为:如果文件是有效的,那么什么都不会被打印,如果它是无效的,那么你会看到一个异常和堆栈跟踪。
如果您真的只是将它用作 ci 测试管道的一部分,那么根本不需要 puts
。如果有效,返回码就是0
,否则非零,你会得到一个异常堆栈跟踪。即使您正在查看它,也可以减少 CLI 输出上的噪音。
如果您使用以下内容:ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"
然后您可以在之后传递文件名,而无需直接编辑 sn-p。
python -c 'import yaml, sys; yaml.safe_load(sys.stdin)' < data.yaml
python 爱好者..
python3 -c 'import yaml, sys, pprint; pprint.pprint(yaml.safe_load(sys.stdin))' < data.yaml
漂亮的版画【参考方案2】:
您可以使用yamllint。它在 Homebrew 等中可用。它可用于语法验证以及 linting。
【讨论】:
【参考方案3】:鉴于您在正在使用的服务器上安装了 perl,并且它具有一些基本的 YAML 工具,您可以使用...
perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")'
需要注意的是,这对文件的解释会很严格,但是很有用。
【讨论】:
找不到 YAML.pm /usr/bin/perl -MCPAN -e '安装 YAML' 可能是 CPAN 安装的问题,但是:Can't locate object method "install" via package "YAML" at -e line 1.
如果上述方法不起作用,您可以随时尝试:perl -MCPAN -e 'shell'
,然后在命令行执行install YAML
【参考方案4】:
要更正您的 .yaml
文件,我推荐使用 yamllint 工具。它可以从本地控制台轻松启动。
包yamllint
适用于所有主要操作系统。
它可以从系统的包源安装。 (例如sudo apt-get install yamllint
)。
See documentation for quick start and installation.
【讨论】:
yamllint
默认情况下会调用很多实际上完全可以接受的“错误”。例如行太长,或“错误”的缩进。我确信修复这些问题是可定制的,但对于许多常见用例来说太挑剔了。【参考方案5】:
如果您的环境中没有安装解释器但仍然有 curl,那么您可以使用在线 linter 项目,例如 Lint-Trilogy:
curl -X POST --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json
它提供验证结果,包括。错误描述(如果有)为 json 或 csv,或者在足够的情况下,作为纯文本 true 或 false。
它也可以作为 docker 文件使用。因此,如果您经常需要基于 REST 的 linter,可能在 CI/CD 管道中,那么在您的站点上托管自己的实例可能会很方便。
【讨论】:
将您的 yaml 导出给第三方需要对该第三方非常信任 没错,这就是为什么 linter 是开源的并且可以作为 docker 容器在您自己的笔记本上运行的原因。 Github 仓库:github.com/berndkuennen/lint_trilogy 它对我有用。这是如何在 netplan 配置中处理空格和制表符的简单方法【参考方案6】:或者交替安装(免费)Eclipse IDE 和 YEdit yaml 编辑器,查看带有语法突出显示、错误标志和大纲视图的 yaml。一次性设置成本对我来说非常有效。
【讨论】:
OP 专门要求提供 CLI 解决方案。以上是关于如何从命令行验证我的 YAML 文件?的主要内容,如果未能解决你的问题,请参考以下文章
AppEngine文档建议使用命令行标志而不是app.yaml文件元素
SpringBoot 中属性文件、YAML 文件和命令行参数之间的优先顺序
如何从 bash 验证是不是已安装 xcode 命令行工具?