构建 xunit.xml 文件后应该使用 xUnitPublisher 还是 xUnitBuilder?

2024-01-07

我正在自动化 dot net core 构建

鉴于 Jenkins 文件中的以下代码片段,我为每个测试项目生成一个 XML 文件。在接下来的步骤中,我想处理这些 XML 文件。

詹金斯给出了两个选择。我很困惑该使用哪个选项。我使用“处理”还是“发布”。两者都提供了有关阈值的相同选项,两者似乎都做了相同的事情。他们都将构建标记为“失败”,并且都向 Jenkins 提供了测试报告。这是遗产吗?或者他们是完全不同的步骤,有自己的目的?

顺便说一句,这个失败检查并抛出错误是阻止 Jenkins 继续构建的唯一方法吗?当构建被标记为“失败”而无法继续其余步骤时,这似乎有点奇怪。如果我想继续,我也可以将 stopProcessingIfError 设置为 false,还是我错过了重点?

stage('Test') {
    def testScript = ""
    def testProjects = findFiles(glob: 'test/**/project.json')

    if (!fileExists('reports/xml')) {
        if (!fileExists('reports')) {
            sh "mkdir reports"
        }
        sh "mkdir reports/xml"
    }

    for(prj in testProjects) {
        println "Test project located, running tests: " + prj.path
        def matcher = prj.path =~ 'test\\/(.+)\\/project.json'

        testScript += "dotnet test --no-build '${prj.path}' -xml 'reports/xml/${matcher[0][1]}.Results.xml' || true\n"
    }

    sh testScript

    step([
        $class: 'XUnitBuilder',
        thresholdMode: 1,
        thresholds: [[$class: 'FailedThreshold', failureThreshold: '1']],
        tools: [[
            $class: 'XUnitDotNetTestType',
            deleteOutputFiles: true,
            failIfNotNew: true,
            pattern: 'reports/xml/*.Results.xml',
            skipNoTestFiles: false,
            stopProcessingIfError: true
        ]]
    ])

    if (currentBuild.result.equals("FAILURE")) {
        throw "Test results did not pass thresholds"
    }
}

查看源代码后,它们的功能似乎相同,除了XUnitPublisher有一个额外的方法,我不明白其目的(!),并且该类在implements list.

关键的区别似乎是XUnitPublisher类扩展了hudson.tasks.Recorder http://javadoc.jenkins.io/hudson/tasks/Recorder.html类,同时XUnitBuilder延长了hudson.tasks.Builder http://javadoc.jenkins-ci.org/hudson/tasks/Builder.html.

我认为面向用户的区别在于,构建器中的失败将 Jenkins 作业标记为“失败”,而发布者中的失败则将作业标记为“不稳定”。 (来源:https://wiki.jenkins.io/display/JENKINS/Terminology https://wiki.jenkins.io/display/JENKINS/Terminology)

鉴于这一切,我建议使用 xUnitPublisher。我将构建命令设置为如果编译通过但某些测试失败则返回 0。这样,Jenkins 会为我提供 FAILED 状态(表示编译损坏)和 UNSTABLE 状态(表示编译正常但测试失败)。我喜欢这样。

提交历史并不能解释为什么会出现这种荒谬的代码重复。我会理解如果一个是根据另一个来实现的,就像通常在弃用时所做的那样......可能是因为每个都必须有不同的超类。

XUnitBuilder.java https://github.com/jenkinsci/xunit-plugin/blob/207f77849172d84c4e4ae8225e345bfbb2796d45/src/main/java/org/jenkinsci/plugins/xunit/XUnitBuilder.java, XUnitPublisher.java https://github.com/jenkinsci/xunit-plugin/blob/207f77849172d84c4e4ae8225e345bfbb2796d45/src/main/java/org/jenkinsci/plugins/xunit/XUnitPublisher.java

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 xunit.xml 文件后应该使用 xUnitPublisher 还是 xUnitBuilder? 的相关文章

随机推荐

  • 即使循环中发生错误如何继续游标循环

    我想将一个表的行插入到另一个表中 为此 我有以下程序 ALTER PROCEDURE LOADDATA a AS BEGIN TRUNCATE TABLE STIDENT A DECLARE SID INT DECLARE SNAME VA
  • 对每个集合视图单元格使用单个表视图控制器

    我有 5 个集合视图单元格 名称为 餐厅 商店 医疗 客厅 公园 等 所以现在我设置了 10 个视图控制器 并将表视图放置在每五个控制器内 我调用 json 数据并在表视图中显示 我还有一个自定义单元格 我在其中用于所有 iew contr
  • ios 当我尝试注册我的应用程序时,如何取消选择游戏中心和应用内购买

    我正在尝试在苹果开发者门户中注册我的应用程序 但您可以在那里选择您的应用程序将要使用的服务 我的问题是我不会使用 游戏中心 或 应用内购买 我怎样才能取消选择这些 我将非常感谢你的帮助 Use Wildcard App ID 如中所示Reg
  • 使用 -Ylog-classpath 运行 sbt

    当我运行 sbtcompile 时出现这样的错误 missing or invalid dependency detected while loading class file DefaultReads class error Could
  • PHP 将 Excel (.xls) 转换为 pdf [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 php java 开源软件转换器或 php 库可以将 xls 文件转换为 pdf 文档 概
  • 如何使用R将年度数据转换为月度数据?

    我有2000年至2015年15年的逐年GDP数据 我想将这些数据转换为月度数据 其中只有月份和年份 我只想将当年的值复制到所有月份 我怎样才能在 R 中做到这一点2010 年的值是 1708 我想为 2010 年的所有月份复制相同的值 我的
  • 最长的数字循环周期

    我试图找到小于 1000 的数字 该数字除以 1 时会产生最长的重复数字串 我有一个十进制数字列表 必须找到具有最长重复序列的数字 这是我到目前为止所拥有的 numbers 2 999 decimal representations num
  • 由于 Android 不活动,15 分钟后自动注销

    如何在android中使用计时器因用户不活动而在15分钟后自动注销 我在 loginActivity java 中使用以下代码 public class BackgroundProcessingService extends Service
  • 错误:无法显示子报表。子报告在预览中有效 - 但在部署时无效

    我有一个运行多个子报告的主报告 我的一个子报告在预览中运行得非常好 但是当我部署该报告并从浏览器运行它时 我只是得到 错误 无法显示子报表 我做了一些研究 但仍然不确定问题是什么 我在不同的浏览器中尝试过 主报告和子报告的数据源都使用相同的
  • 类型错误:无法读取未定义的属性“measureInWindow”

    环境 Windows 10 Node js 10 x Expo 35 0 0 React 16 8 React native 0 62 0 React navigation 3 0 7 开发了一个简单的应用程序来测试 Android 应用程
  • 如何创建提交登录表单的书签

    我意识到从安全角度来看这并不是很好 但请幽默一下 有没有办法创建一个提交表单 例如登录表单 的书签 例如 这有效 但前提是当前浏览器窗口中加载了页面 javascript function document body innerHTML
  • 如何在android中生成release key

    我已经完成了简单的地图应用程序 这里我从 debug keystore 获得了 api 密钥 它在模拟器上工作正常 当我尝试将其作为 apk 文件获取并在设备上运行时 它没有显示地图 我想我需要为其创建发布密钥 我如何为其生成发布密钥以及如
  • 使用向导时如何将输入框值绑定到支持 bean 属性中的映射值

    我正在使用 Primefaces 向导组件 在一个选项卡上 我根据以前的选项卡输入 用户类型 动态创建输入框 输入框文本标签源自列表 在我的支持 bean 中 我有一个映射 其中包含作为键的输入标签和作为值的输入框输入 单击下一步 我希望使
  • 反应本机应用程序中的 canOverrideExistingModule 问题

    大家好 我尝试使用react native camera模块创建一个相机应用程序 当我尝试在我的设备 Android 手机 上运行此应用程序时 出现以下错误 任何人都可以为我提供解决方案吗 转到文件 MainApplication java
  • IIS url 重写 - css 和 js 被错误地重写

    我的 urlrewrites 存在问题 每当我指向要重写的页面时 它都无法显示 因为它还将规则应用于我的网页中引用的 css 和 js 文件 为了尝试解决这个问题 我放入了 css 和 js 的完全限定路径 这在未应用重写的任何页面上都呈现
  • 创建对变量的引用(类似于 PHP 的“=&”)?

    在 PHP 中 可以创建一个引用变量 以便两个命名变量可以查看相同的值 a 1 b a echo a 1 echo b 1 b 2 echo a 2 我希望在 Python 中实现类似的目标 具体来说 我想创建对对象属性的引用 例如 cla
  • C - 使用 scanf 读取特殊字符,例如 'ã'

    是否有可能使scanf读取所有特殊字符 我知道你可以使用scanf n s string 强制 scanf 接受空格 但是我可以对特殊字符做同样的事情吗 例如 当我尝试输入 N o 时 结果只是 N 就像scanf遇到 unicode 字符
  • 如何在 Visual Studio 中安装 C# 类库?

    我正在尝试使用我找到的类库关于这里的另一个问题 https stackoverflow com a 281381 1934286 总的来说 我对 C Visual Studio 和 OOP 还很陌生 所以如果这不是正确的问题 请原谅我 我点
  • GIT 无法生成 Askpass 克隆 Git 存储库时没有此类文件或目录 [重复]

    这个问题在这里已经有答案了 我参考了很多网站来解决 VS 2017 TFS 中的 Git 存储库克隆问题 但无法修复 请帮我 以下是 Visual Studio 版本详细信息 微软 Visual Studio 专业版 2017 版本 15
  • 构建 xunit.xml 文件后应该使用 xUnitPublisher 还是 xUnitBuilder?

    我正在自动化 dot net core 构建 鉴于 Jenkins 文件中的以下代码片段 我为每个测试项目生成一个 XML 文件 在接下来的步骤中 我想处理这些 XML 文件 詹金斯给出了两个选择 我很困惑该使用哪个选项 我使用 处理 还是