当前位置: 首页 > 面试题库 >

Jenkins Groovy脚本发现null testResultAction成功运行

轩辕奕
2023-03-14
问题内容

我们有一个电子邮件报告编写器,用于jenkins的测试套件。它使用常规脚本查找正确的报告,然后制作HTML报告,详细说明测试状态,上次运行,链接等。

hudson.model.Hudson.instance.getItems(hudson.model.FreeStyleProject).each { project ->
    if(project.name.contains(searchCriteria)){
        if(project.lastBuild.testResultAction == null){ 
            tr(){
                td(project.name)                        
                td(){
                    b("No Results")
                }
                ...
            }
        }
        else{
            if(project.lastBuild.testResultAction.failCount > 0){
                tr(){
                    td(project.name)
                    td(){
                        b(style:'color:red', "FAIL")
                    }

                    ...
                }
            }
            else{
            tr(){
                    td(project.name)
                    td(){
                        b(style:'color:red', "PASS")
                    }

                    ...
                }
            }
        }
    }
}

通常,一切运行正常,但是最近一两个特定的构建已经开始一致地返回“无结果”,即它们的.testResultAction为null。我已经检查了testResultAction的实际值,尽管它们运行了詹金斯本身可以识别的干净测试,但它的确为空。

测试已经重新运行,詹金斯人的身影被删除并重新制作。都没有帮助。这个问题似乎困扰着某些无关的构建。我应该知道Jenkins中是否存在特定缺陷,该缺陷会导致testResultAction默认为null且不会更改?否则,谁能建议可能导致这种情况发生的原因,或者我如何制止这种情况?


问题答案:

该方法已弃用,并且也给了我null。我在此方面获得了更多成功:

project.lastBuild.getAction(hudson.tasks.test.AggregatedTestResultAction.class)

尽管它可以为null只是因为项目中没有测试。无论如何,这是一种测试结果的方法,对我有用。

def reportOnTestsForBuild(build) {    
    testResultAction =  build.getAction(hudson.tasks.test.AggregatedTestResultAction.class);

    if (testResultAction == null) {
        println("No tests")
        return
    }

    childReports = testResultAction.getChildReports();

    if (childReports == null || childReports.size() == 0) {
        println("No child reports")
        return
    }

    def failures = [:]
    childReports.each { report ->
        def result = report.result;

        if (result == null) {
            println("null result from child report")
        }
        else if (result.failCount < 1) {
            println("result has no failures")
        }
        else {
            println("overall fail count: ${result.failCount}")
            failedTests = result.getFailedTests();

            failedTests.each { test ->
                failures.put(test.fullDisplayName, test)
                println("Failed test: ${test.fullDisplayName}\n" +
                        "name: ${test.name}\n" +
                        "age: ${test.age}\n" +
                        "failCount: ${test.failCount}\n" +
                        "failedSince: ${test.failedSince}\n" +
                        "errorDetails: ${test.errorDetails}\n")
            }
        }
    }
}


 类似资料:
  • 问题内容: 是否有任何聪明的方法可以通过ssh在远程主机上运行本地Bash功能? 例如: 是的,我知道这行不通,但是有办法实现吗? 问题答案: 您可以使用该命令通过来使功能在远程计算机上可用。有多个选项,具体取决于您要如何运行远程脚本。 要在远程主机上使用该功能: 更好的是,为什么还要麻烦管道: 或者,您可以使用HEREDOC: 如果要发送脚本中定义的所有函数,而不仅仅是发送,请像这样使用: 说明

  • 在这个答案中,docker是在其他脚本中执行的,所以它并不真正适用于我的用例。

  • 本文向大家介绍Ruby和Shell脚本实现判断成绩及格功能,包括了Ruby和Shell脚本实现判断成绩及格功能的使用技巧和注意事项,需要的朋友参考一下 需求为:从键盘输入分数,以此来判断,0-59为不及格,打印“您没有及格,请下次努力!”,60-79为及格,打印“您的成绩及格,请更加努力!”,80-100为成绩良,打印“您的成绩为优秀,请再接再厉!”,如果输入为0-100以外的分数,请打印“您的成

  • 问题内容: 因此,我正在运行一个过程,这将需要几个小时才能完成。我想在完成后自动开始另一个过程。请注意,我无法在第一个脚本中添加对第二个脚本的调用,也无法创建依次运行两个脚本的另一个脚本。在Linux中有什么方法可以做到这一点吗? 编辑:一种选择是使用pgrep 每分钟轮询一次,并检查该过程是否完成。如果是这样,请启动另一个。但是,我不喜欢这种解决方案。 PS:两者都是bash脚本,如果有帮助的话

  • 本文向大家介绍JS实现网页抢购功能(触发,终止脚本),包括了JS实现网页抢购功能(触发,终止脚本)的使用技巧和注意事项,需要的朋友参考一下 以下我们是通过chrome浏览器的开发者功能,实现如何用JS代码完成抢购功能以及如何通过chrome浏览器调试并加载自己写的JS。 身为一名前端开发工程师,有时候业务场景是无法用手速模拟的,老司机也有翻车的时候【你懂得】。因此我特意写这一篇文章,希望能够对大家

  • 本文向大家介绍shell脚本实现文件锁功能,包括了shell脚本实现文件锁功能的使用技巧和注意事项,需要的朋友参考一下 1.背景 当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。这样的问题是,进程不小心意外死亡了,没有清