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

use*_*695 3 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
Run Code Online (Sandbox Code Playgroud)

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

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

tin*_*ita 7

有多种方法可以在 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
Run Code Online (Sandbox Code Playgroud)

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

您可以在我的网站上找到有关 YAML 引用样式的更多信息: https: //www.yaml.info/learn/quote.html