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

发布于 2024-09-28 08:20:27 字数 172 浏览 5 评论 0 原文

我在从 YAML 配置文件中提取内容时遇到问题:

致命错误:解析块映射时;预期<块结束>,但发现块入口

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

I am having issues pulling from a YAML config file:

Fatal error: while parsing a block mapping; expected <block end>, but found block entry

While there are plenty of online YAML validators, which I have tried and have helped, I'd like to validate my YAML files from the command line and integrate this into my continuous integration pipeline.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

时光清浅 2024-10-05 08:20:27

通过基本的 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

With basic Ruby installation this should work:

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

Python version (thx @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml
黎夕旧梦 2024-10-05 08:20:27

您可以使用 yamllint。它可用于 Homebrew 等。它可用于语法验证以及 linting。

You could use yamllint. It's available in Homebrew, etc. It can be used for syntax validation as well as for linting.

似最初 2024-10-05 08:20:27

要更正您的 .yaml 文件,我推荐使用 yamllint 工具。它可以从本地控制台轻松启动。

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

它可以从系统的包源安装。 (例如 sudo apt-get install yamllint )。
查看快速入门和安装文档。

To correct your .yaml files I recommend the tool yamllint. It can be launched easily from the local console.

The package yamllint is available for all major operating systems.

It's installable from the system's package sources. (e.g. sudo apt-get install yamllint).
See documentation for quick start and installation.

妄想挽回 2024-10-05 08:20:27

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

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

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

Given that you have a perl install on the server you are working on, and it has some of the basic YAML tools, you can use...

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

It should be noted that this will be strict in it's interpretation of the file, but useful.

夏见 2024-10-05 08:20:27

使用yq工具!

yq eval your.yaml

它还显示所有值,您可以通过重定向输出来抑制它(无论如何都会显示错误):

yq eval your.yaml > /dev/null

安装 yq 工具:

  • MacOS:
    酿造安装 yq
  • Linux:
    snap brew install yq

更多信息请参见 yq GitHub 页面(包括 Windows 二进制文件):https:// /github.com/mikefarah/yq

Use the yq tool!

yq eval your.yaml

It also displays all the values, you can suppress that by redirecting the output (anyway errors will be displayed):

yq eval your.yaml > /dev/null

Install yq tool:

  • MacOS:
    brew install yq
  • Linux:
    snap brew install yq

More on the yq GitHub page (including Windows binaries): https://github.com/mikefarah/yq

偏爱你一生 2024-10-05 08:20:27
yamllint -d "{extends: default, rules: {quoted-strings: disable, line-length: disable}}"
yamllint -d "{extends: default, rules: {quoted-strings: disable, line-length: disable}}"
调妓 2024-10-05 08:20:27

我首选的方法是使用 yamllint (pip install yamllint)

yamllint -d "{extends: default, Rules: {quoted-strings: enable}}" 。

因为我真的想要捕获报价错误,
例如 validate: bash -c ' ' \""

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

而验证命令的开头显然缺少一个引号。

因此,普通的 yaml 检查器不会检测到这一点,yamllint 甚至不会在其默认配置中检测到这一点,因此请打开引用字符串检查器。

My preferd way is using yamllint (pip install yamllint)

yamllint -d "{extends: default, rules: {quoted-strings: enable}}" .

Since I really want to catch quote errors,
e.g. validate: bash -c ' ' \""

This is valid yaml, since yaml will just quote the string and turn it into:
validate: "bash -c ' ' \\\"\""

Whilst there was just clearly a quote missing at the beginning of the validate comand.

So a normal yaml checker will not detect this, yamllint wil not even detect this in it's default configuration, so turn on quoted-strings checker.

又怨 2024-10-05 08:20:27

另一个选项是 yaml-lint ,它取决于 Node.JS:

  • 安装(CLI): npm install -g yaml-lint
  • 用法:yamllint file.yaml

Another option is yaml-lint that depends on Node.JS:

  • installation (CLI): npm install -g yaml-lint
  • usage: yamllint file.yaml
落在眉间の轻吻 2024-10-05 08:20:27

如果您的环境中没有安装解释器,但仍然出现 curl,那么您可以使用在线 linter 项目,例如 Lint-Trilogy

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

它提供验证结果,包括。错误描述(如果有)为 json 或 csv,或者在足够的情况下,为纯文本 truefalse

它也可以作为 docker 文件提供。因此,如果您经常需要基于 REST 的 linter,也许在 CI/CD 管道中,那么在您的站点上托管自己的实例可能会很方便。

If you got no interpreter installed in your environment but still got a curl, then you could use an online linter project like Lint-Trilogy:

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

It delivers the validation result incl. error descriptions (if any) as json or csv or, where sufficient, as plain text true or false.

It's available as docker file, too. So if you often need a REST based linter, perhaps in a CI/CD pipeline, it may be handy to host an own instance on your site.

£烟消云散 2024-10-05 08:20:27

或者交替安装(免费)Eclipse IDE,然后安装 YEdit yaml 编辑器,然后使用语法突出显示、错误标志和大纲视图查看 yaml。一次性设置成本对我来说非常有效。

Or alternately installed (free) Eclipse IDE and then YEdit yaml editor and see your yaml with syntax highlighting, error flags, and outline views. One time setup cost works pretty well for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文