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

如何在GitLab CI/CD中自定义JUnit报告路径并解决工件上传错误

解决GitLab CI工件上传路径不匹配问题

问题根源

Docker容器内生成的Jacoco报告路径为/proj-name/java/target,但GitLab CI的工作目录是/builds/pkg-name/proj-name(对应环境变量$CI_PROJECT_DIR),两者路径未关联,导致CI无法找到容器内生成的报告文件。

解决方案

方案1:挂载CI工作目录到Docker容器(推荐)

修改build_unit_test.sh中的Docker运行命令,将CI项目的java目录挂载到容器内的/proj-name/java路径,让Maven生成的报告直接写入CI工作目录:

# 替换原docker run命令为以下内容
docker run -v "$CI_PROJECT_DIR/java:/proj-name/java" <你的镜像名称> sh -c "mvn clean install && mvn jacoco:report"

然后在gitlab-ci.yml的test作业中,指定正确的工件路径:

test:
  stage: test
  script:
    - ./build_unit_test.sh
  artifacts:
    paths:
      - java/target/**/*  # 对应挂载后CI工作目录下的路径
    expire_in: 1 week

方案2:从Docker容器拷贝报告到CI工作目录

如果无法修改挂载配置,可在脚本中执行完Docker命令后,将容器内的报告拷贝到CI工作目录:

# 运行容器并生成报告,给容器命名方便后续操作
docker run --name test-job-container <你的镜像名称> sh -c "mvn clean install && mvn jacoco:report"
# 拷贝容器内的报告目录到CI工作目录
docker cp test-job-container:/proj-name/java/target "$CI_PROJECT_DIR/java/"
# 清理容器
docker rm test-job-container

对应的gitlab-ci.yml工件配置和方案1一致。

方案3:调整Dockerfile的工作目录

修改Dockerfile,将工作目录设置为容器内的报告父目录,配合挂载实现路径对齐:

# 在Dockerfile中添加以下行
WORKDIR /proj-name/java

然后在build_unit_test.sh中使用挂载命令:

docker run -v "$CI_PROJECT_DIR/java:/proj-name/java" <你的镜像名称> sh -c "mvn clean install && mvn jacoco:report"

这样Maven会直接在挂载的目录下生成target文件夹,CI可直接读取。

验证

执行CI作业后,检查java/target目录是否出现在CI工作目录中,若存在则工件会正常上传,可在GitLab作业页面的“工件”标签下浏览下载。

内容的提问来源于stack exchange,提问作者Meenal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:35:06