无法在 GitLab CI YAML 中打印包含双引号的字符串

Unable to print string containing double quotes in GitLab CI YAML

我正在使用 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 的各种组合,但没有有效的解决方案。

您可以使用 文字块标量 1 样式符号并将变量定义和后续脚本行放在单独的行中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 所以要注意变量值中的任何 $ 字符(它们必须写成 $$字面量).

1有关此符号和相关符号的解释,请参阅 this answer
2有关 multi-line 命令的详细信息,请参阅 this section of the GitLab docs

我是这样工作的:

  script: |
   "EXPECT_SERVER_OUTPUT='{\"message\": \"Hello World\"}'"
   echo $EXPECT_SERVER_OUTPUT