2017-07-26 12 views
1

私はGroovy DSL Build Flow pluginを使用して、異なるパラメータで別のジョブを実行しています。JenkinのファイルをGroovyスクリプトで作成して書き込む方法は?

最後に、私は、XML形式にそれを収集しています:

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

は、私は、ファイルにこのXMLを書きたいです。

私はresultは正確に内容をファイルである

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

を試してみました。しかし、ビルドが完了した後、私はファイルを見ません。

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 

は、私は、ファイルを作成するための合理的な解決策を見つけることができませんでした。ここで

は、XMLファイルを作成するためのコードの抜粋です。

このビルドのフォルダにこのファイルを正確に作成する方法はありますか?

+0

あなたが内容を書くために、絶対ファイルパスを使用しますか? – Rao

+0

@Raoビルドフォルダにファイルを作成するのに役立つなら、なぜそうしないのですか? –

+0

[OK]をクリックすると、絶対レポートファイルパスを試して、解決するかどうかを確認できます。 – 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を取得します:私のパイプラインジョブで[acceptGitLabMR、addGitLabMRComment、[...] 'のステップの中に 'testcase'というDSLメソッドが見つかりません。 –

+0

@RodKimbleあなたは 'Build flow project'のようなプロジェクトを作成しなければなりません –

+0

私のせいです。いいえ、私は誤解のために残念な 'パイプラインジョブ 'を使用しています –

関連する問題