GitLab CI YAML验证失败原因及无块标量解决方案咨询
问题原因及解决方法
为什么echo 'hello: world'会报错?
这是YAML的解析规则导致的:当一行文本中出现**:后跟空格时,YAML默认会将其解析为键值对(映射结构)**。如果你的script写法是:
jobs: test: script: echo 'hello: world'
YAML解析器会错误地把echo 'hello识别为键,world'识别为对应的值,导致script字段的值变成了一个映射,而非GitLab CI要求的字符串或字符串数组,因此触发验证错误。
而写成echo 'hello:world'时,:后面没有空格,YAML不会触发键值对解析,整个命令被当作完整字符串处理,所以验证通过。
无需块标量实现echo 'hello: world'的方法
有三种简单的方式可以规避这个问题:
1. 用双引号包裹整个命令
双引号会明确告诉YAML这是一个完整的字符串,内部的:和空格不会被解析为键值对分隔符:
jobs: test: script: "echo 'hello: world'"
2. 用单引号包裹整个命令(注意转义内部单引号)
YAML中用两个连续单引号表示一个转义的单引号,这样整个内容会被当作纯字符串:
jobs: test: script: 'echo ''hello: world'''
3. 将script设为数组形式
把命令作为数组的一个元素,数组元素内的内容不会被YAML解析为键值对:
jobs: test: script: - echo 'hello: world'
内容的提问来源于stack exchange,提问作者obe
相关产品推荐
相关产品推荐

