代码之家  ›  专栏  ›  技术社区  ›  user3142695

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

  •  0
  • user3142695  · 技术社区  · 4 年前

    我不太清楚如何在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命令(stop、rm和run)?也许是一个 && ?
    2. " 对于 $dom-$app
    0 回复  |  直到 4 年前
        1
  •  2
  •   tinita    4 年前

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