Continuous integration 如何在YAML中创建包含冒号的配置文件?
根据,本yml无效: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
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