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

标签 bash yaml gitlab gitlab-ci

我正在使用 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/

相关文章:

macos - OS X bash For 循环只处理目录中的一个文件

linux - 从 bash 搜索 jar 或 tar

Bash 从外部文件读取数组

linux - 如何在 bash 脚本中用双引号传递参数

Python 包在 Azure DevOps 工件中发布 : 'D:\a\1\a' is empty. 不会添加任何内容来构建工件

git - Git : "ssh: connect to host gitlab port 22: connection refused" 的问题

Ansible vars 文件条件字典项

ruby - 如何使用 Ruby 存储和调用 YAML 文件中的数据?

git - SSL23_GET_SERVER_HELLO :sslv3 alert handshake failure

jenkins - 为什么 Sonar GitLab 插件在使用默认模板时不将分析结果作为注释发送到 gitlab?