yaml在命令中包含json

时间:2020-05-05 08:55:04

标签: json yaml

我正在尝试在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" }]}'

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" }]}'

>开始一个折叠块标量,以下-阻止添加最后一个换行符。所有行通过空格字符连接在一起。注意不要缩进多于第一行;会在缩进的那一行周围产生换行符。

标量一直持续到遇到父缩进级别的内容为止。我将先前的值设为另一个块标量来演示这一点。

您也可以将所有内容写在一行中,但这似乎更易读。