json - yaml 在命令中包含 json
问题描述
我正在尝试在 yaml 中添加带有 json 的命令(gitlab ci 部署)
script:
- gradle buildZip
- aws s3 cp build/distributions/converter-1.0.zip s3://xxx/converter/fan-converter-${CI_BUILD_REF}.zip
- aws s3 put-object-tagging --bucket xxx --key converter/fan-converter-{$CI_BUILD_REF}.zip --tagging '{"TagSet": [{ "Key": "tmp", "Value": "1" }]}'
似乎 yaml 不太喜欢这部分--tagging '{"TagSet": [{ "Key": "tmp", "Value": "1" }]}'
解决方案
这是因为你有一个:
in 后跟空格。这是映射键的 YAML 语法。环境'
不会保护您,因为它位于 YAML 标量内,因此会被解析为内容。
修复它的最佳方法是使用块标量,其中 YAML 根本不解析特殊字符:
script:
- gradle buildZip
- >-
aws s3 cp build/distributions/converter-1.0.zip
s3://xxx/converter/fan-converter-${CI_BUILD_REF}.zip
- >-
aws s3 put-object-tagging
--bucket xxx
--key converter/fan-converter-{$CI_BUILD_REF}.zip
--tagging '{"TagSet": [{ "Key": "tmp", "Value": "1" }]}'
>
开始一个折叠的块标量,以下-
阻止添加最后的换行符。所有行都通过空格字符连接。注意不要缩进超过第一行;这将在更缩进的行周围创建一个换行符。
标量一直持续到遇到父缩进级别的内容。我将先前的值设为另一个块标量来证明这一点。
您也可以将所有内容写在一行中,但这似乎更具可读性。
推荐阅读
- javascript - 页面上许多视频的 Internet Explorer 和 Edge 中的视频、内存管理问题导致它们显示为暗色/黑色和/或无法播放
- java - 为什么我总是返回 1011 而不是 1101?
- html - Svg 动画在我的页面中没有按预期工作
- fat-free-framework - 使用 PHP 内置 Web 服务器的 Fatfree 路由
- angular - Angular CLI - 获取包含所有来源的覆盖率报告
- php - 如何创建一个使用特征数组的模拟对象?
- javascript - 赛普拉斯:cy.get("a").find("b") 和 cy.get("a b") 之间的任何区别
- sql - 从 SDK Shell 访问 Google Cloud SQL
- c# - 如何在 VS 2017 的另一个项目类型中添加 CPS 项目系统作为参考?
- spring-boot - 如何在没有@Payload 的情况下将发布者消息绑定到我的接收器中的自定义类