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

时间:2020-09-13 12:06:02

标签: bash shell yaml gitlab-ci

我不太确定如何在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

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

  1. 我如何连接docker命令(停止,rm和运行)?也许是&&
  2. 我必须为"使用$dom-$app吗?

1 个答案:

答案 0 :(得分:2)

有几种方法可以在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

相关问题