如何在GitLab CI的IF条件语句中使用regex正则表达式
问题原因&修正方案
你的脚本存在3处明显的语法错误,导致正则匹配逻辑无法正常生效:
- Bash条件语法中,
[[后必须加空格,你写的[[${CI_COMMIT_BRANCH}没有空格,会被识别为无效命令 - 正则表达式和结尾的
]]之间必须加空格,你写的feature\/.*]]缺少空格,会导致语法解析失败 - 正则没有加开头锚点
^,存在误匹配非开头带feature/的分支的风险,且你当前的正则只覆盖了feature/开头的分支,没有包含develop/的匹配逻辑
修正后的代码
仅匹配feature/开头分支版本
before_script: - > if [[ ${CI_COMMIT_BRANCH} =~ ^feature\/.* ]]; then echo "Feature Branch Found !" else echo "Production Branch Found !" fi
同时匹配feature/、develop/开头分支版本(可直接设置变量)
before_script: - > if [[ ${CI_COMMIT_BRANCH} =~ ^(feature|develop)\/.* ]]; then # 这里替换为你需要设置的变量即可 export DEPLOY_ENV="test" echo "Feature/Develop Branch matched, deploy env set to test" else export DEPLOY_ENV="prod" echo "Production Branch matched, deploy env set to prod" fi
额外注意事项
GitLab CI默认使用Bash解析脚本,正则部分不需要加引号,加引号会被识别为普通字符串匹配而非正则匹配,导致逻辑失效。
内容的提问来源于stack exchange,提问作者Husker
相关产品推荐
相关产品推荐

