如何在GitLab CI中使用变量动态构建另一个变量?
GitLab CI/CD 动态构建变量实现方案
可以通过Bash的变量特性实现动态拼接变量名并取值,你之前的写法无法生效的原因是Shell会优先解析$TEST_为独立变量(该变量无定义默认是空值),仅会输出$CI_COMMIT_BRANCH的内容。
方法1:使用Bash间接变量扩展(更安全,推荐)
这是最稳妥的实现方式,避免eval可能带来的注入风险:
script: # 第一步:拼接得到完整的目标变量名,这里${CI_COMMIT_BRANCH^^}是把分支名转为大写,匹配你TEST_MASTER的命名规则 - TARGET_VAR_NAME="TEST_${CI_COMMIT_BRANCH^^}" # 第二步:用间接扩展语法取目标变量的值 - echo ${!TARGET_VAR_NAME}
如果你的分支名本身就是大写格式,把${CI_COMMIT_BRANCH^^}换成$CI_COMMIT_BRANCH即可。
方法2:使用eval实现(需确保分支名可控)
如果分支名是你完全可控的,也可以用eval语法一行实现:
script: - eval "echo \$TEST_${CI_COMMIT_BRANCH^^}"
注意要对第一个$转义,避免Shell提前解析不存在的$TEST_变量。
内容的提问来源于stack exchange,提问作者Husker
相关产品推荐
相关产品推荐

