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

Jenkins工作区无法生成测试报告:Docker集成CI/CD项目问题

Jenkins执行Maven测试无报告问题排查与修复

问题场景

在Docker集成的Jenkins CI/CD项目中,本地执行mvn clean install和mvn clean test均能成功生成测试报告,但Jenkins流水线运行时:

  • 未在Jenkins中显示测试记录
  • 工作目录下未生成target/surefire-reports/*.xml文件

对应的Jenkins流水线代码:

node {
    try {
        stage('Copy Project') {
            sh '''
            rm -rf DockerLoginTest
            mkdir DockerLoginTest
            cp pom.xml DockerLoginTest/
            cp -r /Users/feyzaerdogan/Desktop/cypress/DockerJenkinsLoginTest/src DockerLoginTest/src
            cd DockerLoginTest
            '''
        }
        stage('Build') {
            sh 'mvn clean install -U'
        }
        stage('Test') {
            sh 'mvn test'
        }
    } finally {
        // Bu kısım her zaman çalışır (post-always gibi)
        junit 'target/surefire-reports/*.xml'
    }
}

核心原因

Shell脚本的目录切换仅在当前脚本块内生效:
Copy Project阶段的sh脚本里执行了cd DockerLoginTest,但这个操作只在该sh进程的会话中有效。后续Build、Test阶段的mvn命令依然在Jenkins节点的默认工作目录执行,找不到DockerLoginTest下的pom.xml,自然不会生成target目录和测试报告。

修复方案

方案1:为每个Maven命令指定工作目录

修改Build和Test阶段的Shell命令,通过&&串联目录切换和Maven命令,确保在正确的目录下执行构建:

node {
    try {
        stage('Copy Project') {
            sh '''
            rm -rf DockerLoginTest
            mkdir DockerLoginTest
            cp pom.xml DockerLoginTest/
            cp -r /Users/feyzaerdogan/Desktop/cypress/DockerJenkinsLoginTest/src DockerLoginTest/src
            '''
        }
        stage('Build') {
            sh 'cd DockerLoginTest && mvn clean install -U'
        }
        stage('Test') {
            sh 'cd DockerLoginTest && mvn test'
        }
    } finally {
        // 修正测试报告路径,指向DockerLoginTest下的target目录
        junit 'DockerLoginTest/target/surefire-reports/*.xml'
    }
}

方案2:使用Jenkins dir块统一切换工作目录

利用Jenkins内置的dir步骤,将后续构建、测试阶段统一切换到目标目录,代码更简洁易维护:

node {
    try {
        stage('Copy Project') {
            sh '''
            rm -rf DockerLoginTest
            mkdir DockerLoginTest
            cp pom.xml DockerLoginTest/
            cp -r /Users/feyzaerdogan/Desktop/cypress/DockerJenkinsLoginTest/src DockerLoginTest/src
            '''
        }
        // 切换到DockerLoginTest目录,后续阶段均在此目录执行
        dir('DockerLoginTest') {
            stage('Build') {
                sh 'mvn clean install -U'
            }
            stage('Test') {
                sh 'mvn test'
            }
        }
    } finally {
        junit 'DockerLoginTest/target/surefire-reports/*.xml'
    }
}

额外验证点

  1. 权限检查:确保Jenkins运行用户对DockerLoginTest目录拥有读写权限,避免因权限不足无法生成target目录。
  2. Maven配置一致性:确认Jenkins中配置的Maven版本、settings.xml与本地环境一致,防止因依赖拉取失败导致测试未执行。

内容的提问来源于stack exchange,提问作者Feyza Erdoğan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:44:57