我正在Gitlab项目中实现自动构建。为此,我将gitlab-ci.yml
文件与包含shell命令的多行YAML块一起使用,代码如下:
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
关键字之后,但是似乎无济于事,我的作业日志返回以下语法错误:
syntax error near unexpected token `fi'
我尝试了很多谷歌搜索,但是其他解决方案似乎不起作用。我的跑步者正在使用的外壳是bash
。拜托,有人可以告诉我我在做什么错吗?
答案 0 :(得分:1)
正如我在评论中指出的那样,最简单的方法可能是将脚本保存在自己的文件中(确保其可执行!),然后从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
答案 1 :(得分:0)
问题是gitlab-ci.yml
确实不允许多行脚本(这对gitlab的限制是对YAML的限制)。
因此,如果您不想使用脚本(如@Mureinik所建议),则可以将所有内容折叠为一行:
script:
- if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]; then echo "Building"; mkdir -p dist; touch -a dist/index.html; fi
(我还删除了内部的if
条件;因为您可以对mkdir
和touch
使用标志来获得大致相同的行为)