Edited at

Gradle Wrapper で Flyway 付き SQL 配布ファイルを作る

More than 1 year has passed since last update.


背景


  • Gradle 4 + MySQL 5.7 + Spring Boot 1.5 で開発

  • 勤務先はシンクライアントに近い環境。社則で毎日退社前に個人PC上のデータを消す必要がある (アプリは別)


    • → マイグレーションツール必須



  • どうせならステージング環境等のDBマイグレーションも開発に使っているものと同じツールを使って省力化したい


    • でも Spring Boot + flyway-core の強制自動マイグレーションは怖い



→ サーバ用の SQL 配布アーカイブに、Flyway タスクのみを入れた build.gradle を足してみます。


サーバに配布する build.gradle

plugins {

id 'org.flywaydb.flyway' version '3.2.1'
}
// java プラグインを入れないと JDBC ドライバの dependencies を解決してくれない
apply plugin: 'java'

flyway {
url = 'jdbc:mysql://localhost/foo'
user = xxx
password = xxx
}
flywayClean.enabeld = false // 誤爆防

repositories {
jcenter()
}
dependencies {
runtime group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'
}

展開して ./gradlew flywayMigrate で SQL を適用できます。

なお Gradle のキャッシュは $HOME/.gradle に入ります。


サーバ用 SQL 配布アーカイブを作成するための Gradle タスク

tarball は build/distributions/ 以下に作成されます。

task sqlDist(type: Tar) {

compression = Compression.GZIP
archiveName = "${baseName}-sql-${version}.tar.gz"

// SQL files
into('src') {
from 'src'
include 'main/resources/db/migration/**'
}

// Gradle Wrapper
into('/') {
from 'config/flyway'
include 'build.gradle'
}
into('/') {
from '.'
include 'gradlew'
}
into('gradle') {
from 'gradle'
}
}