gpt4 book ai didi

maven - 防止 Maven 部署插件在测试失败时进行部署

转载 作者:行者123 更新时间:2023-12-05 00:18:15 25 4
gpt4 key购买 nike

我是 maven-release-plugin 的长期用户如果单元测试失败,它将不会发布(也就是将 jars 部署到 maven repo)。

由于各种原因,我只想使用 maven 部署插件,但即使 maven-surefire-plugin 中存在测试失败,显然仍会部署。 .

因此,而不仅仅是

mvn clean deploy

我必须将我的 CI 设置为类似于 (shell) 的两步:
mvn clean test && mvn deploy -DskipTests=true

我已确保没有将surefire 设置为忽略失败。理想情况下,我不想运行两个单独的进程。

当然不能默认部署测试失败?我错过了什么吗?

编辑它似乎是 Jenkins 问题.. 无法重现

我不确定 Jenkins 为什么或如何强制 maven 构建在测试失败时继续(我假设这是为了报告),但它没有显示任何传递给它的选项以使其继续。它似乎只发生在 Jenkins 说“模块已更改,重新计算依赖图”时。

最佳答案

您遇到了 Jenkins 的一个已知问题(或功能,取决于口味),在 Maven 构建中(因此从 Maven Jenkins 作业模板创建)将始终默认通过 -Dmaven.test.failure.ignore=true到相关的 Maven 构建,主要是因为它将构建的状态设置为 UNSTABLE而不是 FAILED在测试失败的情况下。

此行为已在不同的 Stack Overflow 线程中处理,herehere对于一些引用,它也是 open ticket (提供详细描述)在 Jenkins JIRA 平台上,虽然已经有一段时间了,可能不会被修复(或至少在作业配置 UI 中澄清)。

但是,当从自由式 Jenkins 作业模板创建 Maven 构建时不提供该行为,也就是说,使用尚未为 Maven 预先配置的模板,因此没有 maven.test.failure默认情况下会传递属性。

指南确实是在测试失败的情况下不部署 Artifact (这是 maven-surefire-plugin 顺便说一句的默认行为),您可以通过不同的方式解决它:

  • 使用自由风格的 Jenkins 作业模板,因此可以完全控制 Maven 构建执行,尽管放弃了一些不错的预配置
  • 保留 Maven Jenkins 作业并明确传递 -Dmaven.test.failure.ignore=false选项作为初始 mvn clean deploy 的一部分命令
  • 将作业拆分为几个构建步骤,并且仅在前一个严格成功(并且不成功/不稳定)时才执行下一个。第一步是经典的mvn clean install ,然后下一步是通过 Maven(请参阅下一个)或 Jenkins 插件(有 Artifactory/Nexus Jenkins 插件可以很好地处理此任务,其直接优势是更容易快照/发布的凭据和存储库管理,因此更多CI 方面的治理/安全性,从 pom.xml 文件或每个开发人员的 maven 设置中消除噪音)。

  • 关于仅部署的附加 Maven 步骤,一些注意事项也解决了上述评论中的一些问题:

    有一个相关的 difference mvn deploy之间和 mvn deploy:deploy , 前者调用 Maven 阶段,因此在级联 each phase来自 validate直到 deploy (因此, compiletestpackage ,例如)以及在 pom 文件中为某个阶段配置的每个潜在插件执行;后者只是调用一个目标, deploy maven-deploy-plugin 的目标,具有性能的明显直接优势(它只执行一个快速操作,而不是再次执行整个构建)和关注点(它只执行我们在这个阶段真正想要的东西)。

    是的,您可以跳过测试和 maven-jar-plugin不会再次重新打包应用程序,例如,以及 Maven 提供的进一步默认优化,但前者仍然会慢得多且不正确。
    但是, deploy:deploy由于 Maven 构建上下文中缺少信息而无法工作,只需查看 target文件夹不足以识别要部署的内容,Maven 需要知道哪个 Artifact 附加到要部署的当前构建。额外的 jar:jar在这种情况下来救援,不重新打包任何东西,而只是检测它应该打包的内容,将其作为 Artifact 附加到构建上下文并制作 maven-deploy-plugin快乐的。 this 中也解释了这种机制。正如之前在评论中指出的那样,堆栈溢出答案。

    关于maven - 防止 Maven 部署插件在测试失败时进行部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486416/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com