【问题标题】:Unable to print string containing double quotes in GitLab CI YAML无法在 GitLab CI YAML 中打印包含双引号的字符串
【发布时间】:2017-06-07 08:43:33
【问题描述】:

我正在使用CI Lint tester 尝试找出如何存储预期的 JSON 结果,稍后我将其与curl 响应进行比较。这些都不起作用:

尝试 1

---
  image: ruby:2.1
  script:
  - EXPECT_SERVER_OUTPUT='{"message": "Hello World"}'

失败:

在第 4 行第 5 列解析块映射时未找到预期的键

尝试 2

---
  image: ruby:2.1
  script:
  - EXPECT_SERVER_OUTPUT="{\"message\": \"Hello World\"}"

失败:

jobs:script 配置应该是一个哈希

我也尝试过使用 echo 的各种组合,但没有有效的解决方案。

【问题讨论】:

    标签: bash yaml gitlab gitlab-ci


    【解决方案1】:

    您可以使用 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
    

    1请参阅this answer 了解有关此符号和相关符号的说明

    2有关多行命令的更多信息,请参阅this section of the GitLab docs

    【讨论】:

    • 您可以使用有关第一个示例(折叠的多行字符串)的信息来扩展答案,很难猜测它现在的作用。
    【解决方案2】:

    我让它像这样工作:

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

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多