GitLab CI YAML脚本问题:分支子目录未在制品中生成
GitLab CI制品目录异常问题排查与修复
问题根源
手动触发的Job中,$CI_COMMIT_BRANCH 环境变量可能为空(比如Merge Request流水线、手动启动的非分支流水线场景)。此时你的脚本实际执行的是:
mkdir -p public/ cp -a some.html public/
文件自然被直接放到public根目录,不会生成预期的分支子目录。
修复方案
方案1:使用更通用的分支标识变量
替换$CI_COMMIT_BRANCH为$CI_COMMIT_REF_NAME——这个变量在分支、标签、MR流水线中都会被正确赋值(对应分支名、标签名或MR源分支名):
GenerateSomeReport: script: - mkdir -p public/$CI_COMMIT_REF_NAME - cp -a some.html public/$CI_COMMIT_REF_NAME/ rules: - when: manual artifacts: when: always paths: - public
方案2:添加变量非空校验
如果必须依赖$CI_COMMIT_BRANCH,先校验变量是否存在,避免无效执行:
GenerateSomeReport: script: - if [ -z "$CI_COMMIT_BRANCH" ]; then echo "CI_COMMIT_BRANCH变量为空,终止执行"; exit 1; fi - mkdir -p public/$CI_COMMIT_BRANCH - cp -a some.html public/$CI_COMMIT_BRANCH/ rules: - when: manual artifacts: when: always paths: - public
方案3:固定目录名称(适用于无需动态分支的场景)
如果不需要根据分支动态生成目录,直接写死目录名即可:
GenerateSomeReport: script: - mkdir -p public/report - cp -a some.html public/report/ rules: - when: manual artifacts: when: always paths: - public
内容的提问来源于stack exchange,提问作者Kazakov Vsevolod
相关产品推荐
相关产品推荐

