在 Yaml 中转义包含引号和撇号的 cURL 命令

Escape cURL command in Yaml which contains quotes and apostrophes

我有这个 cURL 命令:

curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX

我需要在具有 Yaml 支持的 GitLab CI 文件中使用它。 Yaml 解析器不接受它。通常我会用引号将它括起来,但我已经在命令中同时使用了引号和撇号。

这就是命令现在的样子。

如何正确转义序列?

deploy:
  stage: deploy
  script:
    - "curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"

最简单的方法是使用块标量:

deploy:
  stage: deploy
  script: |-
    curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX

| 开始一个文字块标量,- 告诉 YAML 丢弃尾随换行符(否则它会成为标量的一部分)。为了可读性,您可以改用折叠块标量(换行符将转换为空格):

deploy:
  stage: deploy
  script: >-
    curl -X POST --data-urlencode 'payload={"text":
    "A new version has been deployed to production."}'
    https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX

最后,用双引号也是可以的,只要把标量里面的双引号转义即可(换行也折成空格):

deploy:
  stage: deploy
  script: 
    "curl -X POST --data-urlencode 'payload={\"text\":
     \"A new version has been deployed to production.\"}' 
     https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"