如何在yml脚本中调用多个多行命令



我不太确定如何在CI的yml文件中添加带有多个命令的多行脚本,在我的情况下,该文件是.gitlab-ci.yml:

production:
stage: deploy
image: ${DOCKER_IMAGE}
script:
- while IFS='-' read -r dom app; do
docker stop "$dom-$app" || true &&
docker rm "$dom-$app" || true 
docker run
--name "$dom-$app"
--detach
--restart=always
-e VIRTUAL_HOST=$dom
"$dom-$app":latest
done < $FILE

所以我在这里要做的是读取一个包含应用程序列表的文件。对于每一行,我都必须停止现有的docker映像,删除它,并运行带有一些参数的新映像。

  1. 如何连接docker命令(stop、rm和run(?也许是&&
  2. $dom-$app必须使用"

有几种方法可以在YAML中创建多行字符串。

使用多行纯字符串的方式是,所有行都将用空格折叠在一起。

此外,字符串的最后一行缩进不够。

应该引用像这样的较长字符串,因为在YAML中特殊的字符串中有:#的可能性很高。

我建议使用文本块样式,因为这意味着文本将被完全按照您所看到的进行解释:

script:
- |
while IFS='-' read -r dom app; do
docker stop "$dom-$app" || true
docker rm "$dom-$app" || true 
docker run 
--name "$dom-$app" 
--detach 
--restart=always 
-e VIRTUAL_HOST=$dom 
"$dom-$app":latest
done < $FILE

(请注意,序列(以-开头的项目(不必缩进,这就是-位于script正下方的原因。(

你可以在我的网站上找到更多关于YAML引用风格的信息:https://www.yaml.info/learn/quote.html