首页 > 解决方案 > 如何在 yml 脚本中调用多个多行命令?

问题描述

我不太确定如何在我的 CI 的 yml 文件中添加带有多个命令的多行脚本 - 在我的情况下是 a .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 命令(停止、rm 和运行)?也许一个&&
  2. 我必须使用"$dom-$app

标签: bashshellyamlgitlab-ci

解决方案


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

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

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

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

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

    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


推荐阅读