Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( 番外編 )( gradle-docker-compose-plugin で test の前に自動で Docker コンテナを起動してみる )
概要
記事一覧はこちらです。
Redis、RabbitMQ を Docker に移行したので、Gradle の test タスクを実行したい時にはその前に docker-compose up -d
コマンドを実行してコンテナを起動していないとテストが失敗します。自動で起動できる方法がないか調べてみたところ gradle-docker-compose-plugin を見つけましたので試してみます。
ただし、以下の理由から test タスクの前に gradle-docker-compose-plugin でコンテナを自動起動するようにはしませんでした。
- 既にコンテナが起動していると gradle-docker-compose-plugin の composeUp タスクでエラーとなり、gradle の処理が終了する。開発中は先に手動でコンテナを起動しているはずなので、test を実行したい時に都度コンテナを終了させなければならないのは面倒。解消する方法があると思うのですが、分かりませんでした。。。
- コンソールに不要な出力が出て、build の状況が分かりにくくなる。
参照したサイト・書籍
avast/gradle-docker-compose-plugin
https://github.com/avast/gradle-docker-compose-plugincom.avast.gradle.docker-compose
https://plugins.gradle.org/plugin/com.avast.gradle.docker-composeAbility to set log level for specific task
https://github.com/gradle/gradle/issues/1010Gradle Docker Plugin User Guide & Examples
https://bmuschko.github.io/gradle-docker-plugin/ https://github.com/bmuschko/gradle-docker-plugin- 今回は Docker Compose の自動起動・停止をしたかったので gradle-docker-compose-plugin を試していますが、Spring Boot Application の Docker Image を作成する場合には、この Gradle Plugin が使えそうです。
目次
手順
build.gradle を変更する
plugins { .......... id "com.gorylenko.gradle-git-properties" version "2.0.0-beta1" id "com.avast.gradle.docker-compose" version "0.8.12" } .......... pmd { .......... } dockerCompose.isRequiredBy(test)
- plugins block に
id "com.avast.gradle.docker-compose" version "0.8.12"
を追加します。 dockerCompose.isRequiredBy(test)
を追加します。
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。更新後に Gradle Tool Window を見ると「docker」が追加されていました。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行してみる
clean タスク実行 → Rebuild Project 実行 → build タスクを実行してみると、以下のような画面の表示となり、最後に"BUILD SUCCESSFUL" のメッセージが出力されました。
(.....空行が結構出力されます.....)
- test タスクの前に composeUp タスクでコンテナが起動されて、test が終了すると composeDown タスクでコンテナが終了されます。
- composeUp タスクでコンテナが起動される時にはポート番号がアクセス可能かチェックしてくれます。OK でないと先に進みません。com.avast.gradle.docker-compose の「Usage」に記述されている dockerCompose タスクの設定項目を見ると
waitForTcpPorts = true
という設定がありました。 - 空行が妙にたくさん出力されます。
単に > Task :composeUp
、> Task :composeDown
だけ出力されるようにしたかったのですが、どう設定してもダメでした。。。
ちなみに既にコンテナが起動している場合には、以下の画像のようになります。
(..... Cannot create container for service のエラーが続きます .....)
履歴
2018/12/08
初版発行。