ふと、以前作成した、GolangのCircleciをみてみたら、

junit report形式のxmlもつくれや!(本当は出したらよしなしにしますよ。)って書いてあるのを見つけたので 対応してみた

対応後のcircle.ymlがこれ [https://github.com/shinofara/circle-go/blob/master/circle.yml:embed:cite]

go test にはreport機能が無いので、今回は

jstemmer/go-junit-report を使うことにしました。

どう使うかというと

go test -v ./… | go-junit-report > junit.xml

といった感じ

ただこれの問題点が

テストがエラーの場合exit code が1になるはずなのですが、junit.xmlの生成に成功しているから exit code が0になってしまう。
正常だけど正常じゃない。。。

このままだと、[https://circleci.com/gh/shinofara/circle-go/31:エラーだけど成功] の様にテスト失敗してるけどCI的にはOKってなっちゃうので

{ go test -v ./...; echo $? > /tmp/status;} | go-junit-report > junit.xml;
exit `cat /tmp/status`

という感じで、一度ファイルに書き出して、それをexitで返すという方法を取ることにしました。
素直に exit $? とすればいいやん?でもできないやん?
ということでこうなりました。

あとは、テスト失敗時、成功時の確認をして問題なければこれにて終了

テスト失敗!そしてRED [https://circleci.com/gh/shinofara/circle-go/30:title]

テスト成功!そしてGREEEEEEEN [https://circleci.com/gh/shinofara/circle-go/31:title]

はい、今回は以上

訂正

go-junit-reportには、set-exit-code というオプションがあって、デフォルトではfalseとなっているため、
テスト結果が何であろうともexit 0 となってしまっていたようです。

go-junit-report -set-exit-code=true とすることで、失敗時は失敗となりました。

訂正後のcircle.yml の内容は以下

test:
  override:
    - mkdir -p $CIRCLE_TEST_REPORTS/golang
    - go test -v $(go list ./...|grep -v vendor) | go-junit-report -set-exit-code=true > $CIRCLE_TEST_REPORTS/golang/junit.xml;