Ada*_*ent 4 maven maven-deploy-plugin jenkins maven-surefire-plugin
maven-release-plugin如果有单元测试失败,我很长时间不会发布(也就是将jar部署到maven repo).
出于各种原因,我想只使用maven部署插件,但显然即使在测试失败的情况下仍会部署maven-surefire-plugin.
因此而不仅仅是
mvn clean deploy
Run Code Online (Sandbox Code Playgroud)
我必须设置我的CI与(shell)做两步:
mvn clean test && mvn deploy -DskipTests=true
Run Code Online (Sandbox Code Playgroud)
我已经确定肯定没有设置忽略失败.理想情况下,我不想运行两个单独的进程.
当然,测试失败的部署不能是默认的吗?我错过了什么吗?
编辑它似乎是詹金斯问题..无法重现
我不确定Jenkins为什么或如何强制maven构建继续测试失败(我假设这是用于报告)但它没有显示任何传递给它的选项以继续.它似乎只发生在詹金斯说"模块改变,重新计算依赖图"时.
您遇到了Jenkins的已知问题(或功能,取决于品味),在Maven构建中(因此从Maven Jenkins作业模板创建)将始终默认传递-Dmaven.test.failure.ignore=true给相关的Maven构建,主要是因为它将设置状态构建到,UNSTABLE而不是FAILED在测试失败的情况下.
这种行为已经在不同的Stack Overflow线程中得到了解决,这里和这里有一些参考,它也是Jenkins JIRA平台上的一个开放票(提供详细描述),虽然已经有一段时间了,可能不会被修复(或者至少在作业配置UI中澄清).
但是,从自由式Jenkins作业模板创建Maven构建时未提供该行为,即,使用尚未为Maven预配置的模板,因此maven.test.failure默认情况下不会传递任何属性.
指南确实是在测试失败的情况下(这是maven-surefire-pluginbtw 的默认行为)不部署工件,您可以通过不同方式解决这些问题:
-Dmaven.test.failure.ignore=false选项作为初始mvn clean deploy命令的一部分传递mvn clean install,然后通过Maven(参见下一个)或Jenkins插件(有Artifactory/Nexus Jenkins插件,可以很好地处理此任务,直接利用更轻松的凭据和存储库管理)进行下一步部署用于快照/发布,因此CI方面的更多治理/安全性,从pom.xml文件或每个开发人员的maven设置中消除噪声).关于仅部署的额外Maven步骤,还需要考虑一些因素,以解决上述评论中的一些问题:
有一个相关的差之间mvn deploy和mvn deploy:deploy,其中前者被调用一个Maven相位,并因此在级联的每个阶段从validate直到deploy(因此,compile,test,package,例如),并且每个和在POM文件配置某种相位每一个潜在的插件执行; 后者只是调用一个目标,这个deploy目标maven-deploy-plugin明显具有表演的直接优势(它只执行一个快速动作而不是整个构建)和关注点(它只执行我们在这个阶段真正想要的) .
是的,您可以跳过测试,并且maven-jar-plugin不会再次重新打包应用程序,例如,Maven提供的进一步默认优化,但前者仍然会慢得多且不太正确.
但是,deploy:deploy由于Maven构建上下文中缺少信息而无法工作,仅查看该target文件夹不足以识别要部署的内容,Maven需要知道哪个工件附加到要部署的当前构建.jar:jar在这种情况下,额外的是救援,不是重新包装任何东西,而只是简单地检测它应该被打包的东西,将它作为工件附加到构建上下文并使得maven-deploy-plugin快乐.正如之前在评论中指出的那样,此 Stack Overflow答案中也解释了这种机制.
| 归档时间: |
|
| 查看次数: |
2057 次 |
| 最近记录: |