Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Maven Surefire 3没有和Docker一起在Jenkins进行黄瓜测试?_Java_Maven_Docker_Jenkins_Cucumber Jvm - Fatal编程技术网

Java 为什么Maven Surefire 3没有和Docker一起在Jenkins进行黄瓜测试?

Java 为什么Maven Surefire 3没有和Docker一起在Jenkins进行黄瓜测试?,java,maven,docker,jenkins,cucumber-jvm,Java,Maven,Docker,Jenkins,Cucumber Jvm,我有一个Java项目,包含一些Cucumber测试和一些常规JUnit测试,由Maven管理 我想用Docker在Jenkins中运行测试,所以我写了这个Jenkins文件: pipeline { agent { docker { image 'maven:3.6.1' } } stages { stage('build') { steps {

我有一个Java项目,包含一些Cucumber测试和一些常规JUnit测试,由Maven管理

我想用Docker在Jenkins中运行测试,所以我写了这个
Jenkins文件

pipeline {
    agent {
        docker {
            image 'maven:3.6.1'
        }
    }
    stages {
        stage('build') {
            steps {
                sh 'mvn clean verify -Dmaven.test.failure.ignore=true'
            }
            post {
                success {
                    junit 'target/surefire-reports/**/*.xml'
                }
            }
        }
    }
}
当我运行构建时,常规测试通过,但Cucumber测试失败:

错误消息

URI有一个查询组件

Stacktrace

java.lang.IllegalArgumentException:URI有一个查询组件

直到我为
maven surefire plugin
禁用
trimStackTrace
,我才能获得详细信息:


org.apache.maven.plugins
.
在本地Jenkins安装中,我创建了一个类型为“Multibranch Pipeline”的新项目,并在“Branch Sources”中添加了本地git项目作为git项目存储库。没有其他变化

通过结合TYY和,我能够以一种避免创建问号目录的方式配置
Jenkinsfile

我们需要通知Maven用户的主目录,并将其映射到容器外的目录

pipeline {
    agent {
        docker {
            image 'maven:3.6.1'
            args '-v /var/lib/jenkins:/usr/src/mymaven -w /usr/src/mymaven'
        }
    }
    stages {
        stage('build') {
            steps {
                sh 'MAVEN_OPTS="-Duser.home=/usr/src/mymaven" mvn clean verify -Dmaven.test.failure.ignore=true'
            }
            // ...
        }
    }
}
  • -v/var/lib/jenkins:/usr/src/mymaven
    将主机上的
    /var/lib/jenkins
    目录映射到容器内的
    /usr/src/mymaven
    目录
  • -w/usr/src/mymaven
    设置容器内的工作目录
  • MAVEN_OPTS=“-Duser.home=/usr/src/mymaven”
    设置MAVEN的
    user.home
    Java属性

证明它在MCVE上有效。

尝试设置user.home java系统属性[export\u java\u OPTIONS=-Duser.home=/home/user]我刚刚尝试用
sh'MAVEN\u OPTS=“-Duser.home=/var/lib/jenkins”mvn clean verify…”替换
jenkins文件中的步骤。
。我收到一个错误,说“无法在/var/lib/jenkins/.m2/repository创建本地存储库”。这肯定是maven的问题。你必须弄清楚为什么maven会创建一个问号目录。最简单的方法是在调试模式下启动maven并附加调试器。
$ sudo su - jenkins

$ ls /var/lib/jenkins/workspace/question-mark-dir_master
'?'   Jenkinsfile   LICENSE   pom.xml   README.md   src   target
pipeline {
    agent {
        docker {
            image 'maven:3.6.1'
            args '-v /var/lib/jenkins:/usr/src/mymaven -w /usr/src/mymaven'
        }
    }
    stages {
        stage('build') {
            steps {
                sh 'MAVEN_OPTS="-Duser.home=/usr/src/mymaven" mvn clean verify -Dmaven.test.failure.ignore=true'
            }
            // ...
        }
    }
}