逃避YAML cURL命令包含引号和撇号

问题描述:

我有了这个cURL命令:逃避YAML 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"