无法在 GitLab CI YAML 中打印包含双引号的字符串
Posted
技术标签:
【中文标题】无法在 GitLab CI YAML 中打印包含双引号的字符串【英文标题】:Unable to print string containing double quotes in 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
的各种组合,但没有有效的解决方案。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于无法在 GitLab CI YAML 中打印包含双引号的字符串的主要内容,如果未能解决你的问题,请参考以下文章
gitlab-ci.yaml:在多行 python docker 镜像中运行 python
无法在GitLab CI docker-in-docker中对neo4j数据库运行测试
GitLab CI 的多行 YAML 字符串 (.gitlab-ci.yml)