yaml включает json в команду - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь добавить команду с json в yaml (развертывание 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 Ответ

2 голосов
/ 05 мая 2020

Это потому, что у вас есть :, за которым следует пробел. Это синтаксис 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" }]}'

> запускает скаляр свернутого блока , следующий - предотвращает добавление последней новой строки. Все строки соединяются пробелами. Остерегайтесь отступа строк больше, чем первая строка; это создало бы разрыв строки вокруг этой строки с большим отступом.

Скаляр продолжается до тех пор, пока не встретит содержимое на родительском уровне отступа. Я сделал предыдущее значение другим скаляром блока, чтобы продемонстрировать это.

Вы также можете записать все в одну строку, но это кажется более читаемым.

...