gitlab-ci.yml:意外标记"fi"附近的语法错误



我正在我的gitlab项目中实现自动构建。为之

if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]
    then
        echo "Building"
        if [ ! -d "dist" ]; then mkdir dist; fi
        if [ ! -f "dist/index.html" ]; then touch dist/index.html; fi
fi

我尝试了许多解决方案,例如在if语句之后放置;,也将fi关键字置于CC_3之后,但似乎无效,我的作业日志返回以下语法错误:

syntax error near unexpected token `fi'

我试图谷歌搜索它,但是其他解决方案似乎行不通。我的跑步者正在使用的外壳是bash

正如我在评论中指出的那样,最简单的方法可能是将脚本放在自己的文件中(请确保它是可执行的!(,然后从gitlab ci中调用它。

,例如,您可以拥有一个build.sh文件:

#!/bin/bash
if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]
    then
        echo "Building"
        if [ ! -d "dist" ]; then mkdir dist; fi
        if [ ! -f "dist/index.html" ]; then touch dist/index.html; fi
fi

然后从YML呼叫:

some_task:
  image: ubuntu:18.04
  script:
  - ./build.sh

对我来说,使用- |(请注意-|之间的空间(语法适用于多行Bash脚本:

script:
  - |
    if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]
      then
        echo "Building"
        if [ ! -d "dist" ]; then mkdir dist; fi
        if [ ! -f "dist/index.html" ]; then touch dist/index.html; fi
    fi

介意脚本的线必须从相同的缩进级别开始。

另请参见官方的gitlab文档

问题是,.gitlab-ci.yml实际上不允许多行脚本(这比Gitlab更限制YAML(。

因此,如果您不想使用脚本(@mureinik建议(,则可以将所有内容崩溃成一行:

  script:
  - if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]; then echo "Building"; mkdir -p dist; touch -a dist/index.html; fi

(我还删除了内部的.gitlab-ci.yml0-条件;因为您可以使用标志到mkdirtouch获得大致相同的行为(

最新更新