前提
- Java プロジェクト
- ビルドツールは Gradle
- テストコードで testcontainers-java を使ってる
課題
解決方法
- 環境変数をいい感じに解決するため dotenv-gradle を利用する
- build.gradle へプラグインを追加
- 環境変数を設定する
.envファイルの作成.gitignoreで除外ファイルにしておいたほうがいいでしょう
- test タスクへ環境変数を渡すため environment プロパティを指定する
例
ファイルレイアウトはこういう感じになります。
./build.gradle ./settings.gradle ./src/main/java/xxxx ./src/test/java/xxxx ./.env
.env ファイルの内容は次のような感じです。
$ cat .env DOCKER_CERT_PATH=/path/to/docker/certs DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://dockerhost:2376
最終的な build.gradle は次のような感じになります。
plugins {
id 'java'
id 'co.uzzu.dotenv.gradle' version '1.1.0' // プラグインの追加
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_11
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter-api:5.3.1')
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.3.1')
testImplementation('org.testcontainers:junit-jupiter:1.14.3')
testImplementation('org.testcontainers:postgresql:1.14.3')
}
test {
useJUnitPlatform()
// environment で指定した環境変数だけになるので、System.getenv() も指定しないとおかしなことになる
environment = System.getenv() + [
'DOCKER_HOST' : env.fetch('DOCKER_HOST', 'unix:///var/run/docker.sock'),
'DOCKER_TLS_VERIFY': env.fetch('DOCKER_TLS_VERIFY', ''),
'DOCKER_CERT_PATH' : env.fetch('DOCKER_CERT_PATH', ''),
]
}