GitLab CI YAML的script中基于流水线变量使用条件逻辑报错如何解决?
错误原因
你当前的配置存在3个核心问题:
- GitLab CI的
script段中每一个-开头的条目都是独立的shell执行进程,你将if、then、else、fi拆分到多个-条目,会导致shell执行完第一行if语句后就丢失上下文,找不到对应的闭合语法,直接触发unexpected end of file报错 - shell语法中
[是内置命令而非语法标记,和后面的条件、]和前面的条件之间必须保留空格,你写的["$SUITE" == "TEST1"]本身就不符合shell语法规范 - 逻辑结构不闭合:你写了两个独立的
if判断,只写了一个fi闭合,同时else只会匹配第二个if,逻辑不符合你三个选项分支的需求
正确配置方案
方案1:多分支判断写法
将整个shell逻辑合并为单条script条目,保证shell上下文连贯:
script: - |- if [ "$SUITE" == "TEST1" ]; then mvn clean verify -s settings.xml -DfailIfNoTests=false -P 'test.db.it' elif [ "$SUITE" == "TEST2" ]; then mvn clean verify -s settings.xml -DfailIfNoTests=false -P 'test.db.it2' else mvn clean verify -s settings.xml -DfailIfNoTests=false -P 'test.db.it3' fi
方案2:简化变量替换写法
避免写多层分支,逻辑更清晰不易出错:
script: - PROFILE="test.db.it3" - if [ "$SUITE" == "TEST1" ]; then PROFILE="test.db.it"; fi - if [ "$SUITE" == "TEST2" ]; then PROFILE="test.db.it2"; fi - mvn clean verify -s settings.xml -DfailIfNoTests=false -P "$PROFILE"
内容的提问来源于stack exchange,提问作者Scientist
相关产品推荐
相关产品推荐

