我有一个由 Maven 管理的带有一些 Cucumber 测试和一些常规 JUnit 测试的 Java 项目。
我想使用 Docker 在 Jenkins 中运行测试,所以我写了这个Jenkinsfile:
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 有一个查询组件
堆栈跟踪
java.lang.IllegalArgumentException:URI 有一个查询组件
直到我禁用它trimStackTrace,maven-surefire-plugin我才得到详细信息:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<trimStackTrace>false</trimStackTrace>
</configuration>
</plugin>
这很令人费解,因为:
mvn verify在本地运行时,它可以工作
在 中使用agent any时Dockerfile,而不是 maven Docker 映像,它可以工作
当使用maven-surefire-pluginversion2.22.2而不是 时3.0.0-M3,它可以工作
我以 Jenkins 身份登录并查看了工作区:
$ sudo su - jenkins
$ ls /var/lib/jenkins/workspace/question-mark-dir_master
'?' Jenkinsfile LICENSE pom.xml README.md src target
那里有一个问号 ( ?) 目录,它包含该.m2目录以及项目所需的所有工件。我怀疑这可能是异常的原因,因为类路径中有问号,而问号是引入 URI 查询组件的。
目前我可以降级到maven-surefire-plugin版本2.22.2作为一种解决方法。但这里的实际问题是什么?
会不会是新的bug maven-surefire-plugin?从堆栈跟踪来看,我不会打赌。
是 Jenkins 还是 Maven docker 映像(哪个?)中的问题,导致目录具有如此不幸的名称?
难道我做错了什么?
如果你想试试这个,我有一个 MVCE。在我的本地 Jenkins 安装中,我创建了一个类型为“Multibranch Pipeline”的新项目,并在“Branch Sources”中添加了我的本地 git 项目作为 git 项目存储库。没有其他变化。
白猪掌柜的
相关分类