Continuous integration 如何在YAML中创建包含冒号的配置文件?

Continuous integration 如何在YAML中创建包含冒号的配置文件?,continuous-integration,yaml,gitlab-ci,Continuous Integration,Yaml,Gitlab Ci,根据,本yml无效: pages: stage: deploy image: python:3.5 script: - echo "foo: $VAR" > site.yml - cat ~/.python-gitlab.cfg artifacts: paths: - _build only: - master 错误: jobs:pages:script config should be a string or an array

根据,本yml无效:

pages:
  stage: deploy
  image: python:3.5
  script:
  - echo "foo: $VAR" > site.yml
  - cat ~/.python-gitlab.cfg

  artifacts:
    paths:
      - _build
  only:
    - master
错误:

jobs:pages:script config should be a string or an array of strings
如果我删除
echo
行上的冒号,它会工作

我想做的是动态创建一些配置文件,以符合现有工具的要求,使用私有变量,如
echo“url:$CI_PROJECT\u url”>site.yml

url: "https://gitlab.com/group/project"

但是我不能这样做,因为yaml被认为是无效的,而且我没有找到解决办法。或者我必须围绕我的工具编写代码来传递命令行参数,而不是读取配置文件。不过,这个冒号似乎是一个bug。

如果您将整行内容用引号括起来,它应该可以工作,如下所示:

- 'echo "foo: $VAR" > site.yml'
Gitlab的CI lint将其标记为正确的语法


更多信息请参见。

如@Jawad所示,整行的单引号起作用:

但是如果您的命令包含其他单引号,我发现使用
管道
块定标器样式最容易:
|

- |
  echo "I want to echo the key"
  echo 'foo: $VAR' > site.yml

更多关于块定标器样式的文档可以在这里找到:

这是一个巧妙的技巧。但是,它确实有一个副作用,即在输出日志中,您将只看到第一个命令。后续命令将替换为
#折叠的多行命令
。此外,您可以简化为
脚本:|
,不需要
-|
- |
  echo "I want to echo the key"
  echo 'foo: $VAR' > site.yml