かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

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 の状況が分かりにくくなる。

参照したサイト・書籍

  1. avast/gradle-docker-compose-plugin
    https://github.com/avast/gradle-docker-compose-plugin

  2. com.avast.gradle.docker-compose
    https://plugins.gradle.org/plugin/com.avast.gradle.docker-compose

  3. Ability to set log level for specific task
    https://github.com/gradle/gradle/issues/1010

  4. Gradle 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 が使えそうです。

目次

  1. build.gradle を変更する
  2. clean タスク実行 → Rebuild Project 実行 → build タスクを実行してみる

手順

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」が追加されていました。

f:id:ksby:20181208100156p:plain

clean タスク実行 → Rebuild Project 実行 → build タスクを実行してみる

clean タスク実行 → Rebuild Project 実行 → build タスクを実行してみると、以下のような画面の表示となり、最後に"BUILD SUCCESSFUL" のメッセージが出力されました。

f:id:ksby:20181208101445p:plain f:id:ksby:20181208101550p:plain f:id:ksby:20181208101657p:plain f:id:ksby:20181208101914p:plain (.....空行が結構出力されます.....) f:id:ksby:20181208102027p:plain

  • test タスクの前に composeUp タスクでコンテナが起動されて、test が終了すると composeDown タスクでコンテナが終了されます。
  • composeUp タスクでコンテナが起動される時にはポート番号がアクセス可能かチェックしてくれます。OK でないと先に進みません。com.avast.gradle.docker-compose の「Usage」に記述されている dockerCompose タスクの設定項目を見ると waitForTcpPorts = true という設定がありました。
  • 空行が妙にたくさん出力されます。

単に > Task :composeUp> Task :composeDown だけ出力されるようにしたかったのですが、どう設定してもダメでした。。。

ちなみに既にコンテナが起動している場合には、以下の画像のようになります。

f:id:ksby:20181208223407p:plain (..... Cannot create container for service のエラーが続きます .....) f:id:ksby:20181208223507p:plain

履歴

2018/12/08
初版発行。