我正在使用 CI Lint tester尝试弄清楚如何存储预期的 JSON 结果,稍后我将其与 curl
响应进行比较。这些都不起作用:
尝试 1
---
image: ruby:2.1
script:
- EXPECT_SERVER_OUTPUT='{"message": "Hello World"}'
失败:
did not find expected key while parsing a block mapping at line 4 column 5
尝试 2
---
image: ruby:2.1
script:
- EXPECT_SERVER_OUTPUT="{\"message\": \"Hello World\"}"
失败:
jobs:script config should be a hash
我也尝试过使用 echo
的各种组合,但没有有效的解决方案。
最佳答案
您可以使用literal block scalar1 样式的表示法并将变量定义和后续脚本行放在单独的行2 中,而不必担心引用:
myjob:
script:
- |
EXPECT_SERVER_OUTPUT='{"message": "Hello World"}'
或者你可以转义嵌套的双引号:
myjob:
script:
- "EXPECT_SERVER_OUTPUT='{\"message\": \"Hello World\"}'"
但您可能还想只使用 variables喜欢:
myjob:
variables:
EXPECT_SERVER_OUTPUT: '{"message": "Hello World"}'
script:
- dothething.sh
注意:变量默认为 expanded在变量定义内部,因此请注意变量值内的任何 $
字符(它们必须写成 $$
才能是文字)。这个功能也可以turned off .
1参见this answer有关此符号和相关符号的解释
2参见 this section of the GitLab docs有关多行命令的更多信息
关于bash - 无法在 GitLab CI YAML 中打印包含双引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41796197/