2017-07-26 80 views
1

我正在使用Groovy DSL Build Flow plugin来运行具有不同参数的另一个作业。如何使用Groovy脚本创建并写入来自Jenkin的文件?

最后,我也收集到XML格式:

<testsuite tests='1'> 
    <testcase name='build_1' build_number='#882'> 
    <failure /> 
    </testcase> 
</testsuite> 

我想写这个XML到文件。

我试图

def file = new File("report.xml") 
file << result 

其中result恰好文件内容。但是,构建完成后,我没有看到任何文件。

以下是创建XML文件的代码片段:

writer = new StringWriter() 
builder = new groovy.xml.MarkupBuilder(writer) 

builder.testsuite(tests: builds.size()) { 
    for (bld in builds) { 
     def buildName = bld.key 
     def numberOfBuild = hudson.console.HyperlinkNote.encodeTo("/" + bld.value.getUrl(), 
       String.valueOf(bld.value.getDisplayName())) 
     def statusOfBuild = hudson.console.HyperlinkNote.encodeTo('/' + bld.value.getUrl() 
       + "console", bld.value.result.toString()) 

     if (statusOfBuild.contains("FAILURE")) { 
      testcase(name: "$buildName", build_number: "$numberOfBuild") { 
       failure() 
      } 
     } else { 
      testcase(name: "$buildName", build_number: "$numberOfBuild") 
     } 

     build.setResult(build.result.combine(bld.value.result)) 
    } 
} 

println writer.toString() 

def file = new File("report.xml") 
file << result 

我找不到创建文件的任何合理的解决方案。

如何在此版本的文件夹中创建此文件?

+0

你想使用绝对文件路径写的内容是什么? – Rao

+0

@Rao如果它有助于在构建文件夹中创建文件,为什么不呢。 –

+0

好吧,那么你可以试试绝对报告文件路径,看看是否解决。 – Rao

回答

0

谷歌搜索和深层调试后,我解决了这个问题:

def file = new File(build.workspace.toString() + "/report.xml") 
writer = file.newWriter() 
builder = new groovy.xml.MarkupBuilder(writer) 
// create correct repport file 
builder.testsuites() { 
    builder.testsuite(name: "tms-edge-load", tests: builds.size()) { 
     for (bld in builds) { 
      def buildName = bld.key 
      def statusOfBuild = hudson.console.HyperlinkNote.encodeTo('/' + bld.value.getUrl() 
        + "console", bld.value.result.toString()) 
      println statusOfBuild 

      if (!statusOfBuild.contains("SUCCESS")) { 
       testcase(name: "$buildName") { 
        failure() 
       } 
      } else { 
       testcase(name: "$buildName") 
      } 
     } 
    } 
} 
println writer.toString() 
writer.close() 

文件被成功保存到项目工作区:

<testsuites> 
    <testsuite name='tms-edge-load' tests='1'> 
    <testcase name='build_1'> 
     <failure /> 
    </testcase> 
    </testsuite> 
</testsuites> 
+0

我正在反对类似的问题,即使使用你的代码,我总是得到'java.lang.NoSuchMethodError:在我的管道作业 –

+0

中找不到步骤[acceptGitLabMR,addGitLabMRComment,[...]']中找到这样的DSL方法'testcase' @RodKimble你必须创建你的项目,比如'Build flow project' –

+0

我的错。不,我正在使用一个简单的'管道工作'抱歉的误解 –