我正在我的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.yml
0-条件;因为您可以使用标志到mkdir
和touch
获得大致相同的行为(