尋常でないもふもふ

a software engineer blog

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() はコミットに含めないこと。