我正在尝试在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" }]}'
答案 0 :(得分:2)
这是因为其中有一个:
,后跟空白。这是映射键的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" }]}'
>
开始一个折叠块标量,以下-
阻止添加最后一个换行符。所有行通过空格字符连接在一起。注意不要缩进多于第一行;会在缩进的那一行周围产生换行符。
标量一直持续到遇到父缩进级别的内容为止。我将先前的值设为另一个块标量来演示这一点。
您也可以将所有内容写在一行中,但这似乎更易读。