Jenkinsの結果がUNSTABLEになる
Jenkins でビルドに JUnit を連携させてる場合に、UNSTABLE で終了した。
原因は mocha のテストに console.log() を記述したままになっていたからだけど、なぜそうなるのかわかりにくかったため書いとく。
Jenkins ジョブのコンソール出力
(略) Build step 'Publish JUnit test result report' changed build result to UNSTABLE Finished: UNSTABLE
エラー内容
Jenkins ではビルドの結果としてテストで失敗と表示された。
テスト結果 (1個の失敗 / +1) test-report.xml.<init>
スタックトレースを見てみると Content is not allowed in prolog.
というエラー。
Failed to read test report file /var/lib/jenkins/jobs/sample/workspace/sample/test-report.xml org.dom4j.DocumentException: Error on line 1 of document file:///var/lib/jenkins/jobs/sample/workspace/sample/test-report.xml : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog. at org.dom4j.io.SAXReader.read(SAXReader.java:482) at org.dom4j.io.SAXReader.read(SAXReader.java:264) at hudson.tasks.junit.SuiteResult.parse(SuiteResult.java:123) at hudson.tasks.junit.TestResult.parse(TestResult.java:273) at hudson.tasks.junit.TestResult.parsePossiblyEmpty(TestResult.java:229) at hudson.tasks.junit.TestResult.parse(TestResult.java:164) at hudson.tasks.junit.TestResult.parse(TestResult.java:147) at hudson.tasks.junit.TestResult.<init>(TestResult.java:123) at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:117) at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:90) at hudson.FilePath.act(FilePath.java:920) at hudson.FilePath.act(FilePath.java:893) at hudson.tasks.junit.JUnitParser.parse(JUnitParser.java:87) at hudson.tasks.junit.JUnitResultArchiver.parse(JUnitResultArchiver.java:121) at hudson.tasks.junit.JUnitResultArchiver.perform(JUnitResultArchiver.java:133) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:740) at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:710) at hudson.model.Build$BuildExecution.post2(Build.java:182) at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:659) at hudson.model.Run.execute(Run.java:1728) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:231) Caused by: org.xml.sax.SAXParseException; systemId: file:///var/lib/jenkins/jobs/sample/workspace/sample/test-report.xml; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
直接 test-report.xml を vi で開いてみると、XMLファイルの先頭行に XML 形式ではない文字列が書き込まれていた。
1407895993 <testsuite name="Mocha Tests" tests="1570" failures="0" errors="0" skipped="7" timestamp="Wed, 13 Aug 2014 02:01:51 GMT" time="64.689"> <testcase classname="sample" name="should get sample" time="0.003"/> <testcase classname="sample" name="should send sample api" time="0.002"/> <testcase classname="sample" name="should be error as error.sample" time="0.001"/> (以下略)
ここでは Data.now() の結果を console.log() で出力していたが、コミット時に取り除くのを忘れていた。
それが text-report.xml に混入してしまい、Content is not allowed in prolog.
になった。
結論
console.log() はコミットに含めないこと。