建構 xunit.xml 文件後,我應該使用 xUnitPublisher 還是 xUnitBuilder?
我正在自動化點網核心建構
鑑於我的 Jenkins 文件中的以下片段,我為我擁有的每個測試項目生成一個 XML 文件。在接下來的步驟中,我想處理這些 XML 文件。
詹金斯給出了兩種選擇。我很困惑使用哪個選項。我使用“過程”還是“發布”。兩者都給出了相同的門檻值選項,兩者似乎都做同樣的事情。他們都將建構標記為 FAILED,他們都向 Jenkins 提供了測試報告。這是遺產嗎?或者它們是完全不同的步驟,有自己的目的?
順便說一句,這個 FAILURE 檢查並拋出錯誤是阻止 Jenkins 繼續建構的唯一方法嗎?當建構標記為 FAILED 以繼續其餘步驟時,這似乎有點奇怪。如果我想繼續,我也可以將 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列表中聲明了更多介面。關鍵的區別似乎是
XUnitPublisher類擴展了hudson.tasks.Recorder類,而XUnitBuilder擴展了hudson.tasks.Builder.我相信面向使用者的區別在於,建構者的失敗將 Jenkins 的工作標記為“失敗”,而發布者的失敗將工作標記為“不穩定”。(來源:https ://wiki.jenkins.io/display/JENKINS/Terminology )
鑑於這一切,我建議使用 xUnitPublisher。如果編譯通過但某些測試失敗,我將建構命令設置為返回 0。這樣,Jenkins 給了我一個失敗的編譯狀態和一個不穩定的狀態,用於工作編譯但測試失敗。我喜歡這種方式。
送出歷史並沒有解釋為什麼會有這種荒謬的程式碼重複。我會理解一個是否是根據另一個來實現的,就像棄用時通常所做的那樣……可能是因為每個都必須有不同的超類。