Java 为什么Maven Surefire 3没有和Docker一起在Jenkins进行黄瓜测试?
我有一个Java项目,包含一些Cucumber测试和一些常规JUnit测试,由Maven管理 我想用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 {
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'
}
// ...
}
}
}