You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:55:19