This is my life.

There are many like it, but this one is mine.

Spring Boot WebアプリケーションをCI上でスモークテストする

機能も作り込んだ。テストもオールグリーン。さあ張り切ってみんなの前でデモするぞ...

$ ./gradlew bootRun

...

エラー

ってこと、ありませんか?
僕はありました。

できるだけ実行コストをかけないように、ユニットテストではSpringに依存しないようにしています。
もちろん結合テストなどでは @SpringBootTest を利用していますがアプリケーション起動時のエラーは確認できません。

そんな中、以前 FlywayWebアプリケーションを起動しないで 実行する方法を調べていたことを思いました。

dev.classmethod.jp

※上記の記事時点では Spring Boot 1.5 なので、若干変わっています。

現在(2018/11/23時点)だと以下になります。

$ ./gradlew bootRun --args='--spring.main.web-application-type=none'

はい、あとはもうおわかりですね。
上記のコマンドをお使いの CI上で実行するだけです。

Webサーバーの立ち上げをしないで Spring Boot アプリケーションを起動することができます。
このとき、起動に失敗すれば 0 以外の Exit Code を返してくれるので、 CI では失敗として通知してくれます。

Flyway の DDL を修正や追加したときも、失敗したらCIコケるので便利でした。

一見目的が違うけど、「あー、あれ使ったらこれ達成できるなー。」って瞬間が好き。