はじめに
Java/Spark プロジェクトの Gradle を利用したビルド/デプロイについて、私が試したことをまとめたものです。
(ここで言うSpark
は、分散処理ライブラリのApache Spark
ではなく、Java の Sinatra ライクな Microframework のSpark
のことです)
目次
- Hello World アプリ
- jade テンプレートエンジン
- Grunt/bower による Web パッケージのビルド
- 付録 A. TravisCI によるビルド
- 付録 B. Gradle で docker build
- 付録 C. TravisCI から DockerHub へ docker push
各章でのソースコードは Commits · kaakaa/gradle-frontend-boilerplate から確認できます。
環境
- Java 1.8.0_74
- Gradle 2.12
- spark-core 2.3
- spark-template-jade 2.3
- node.js 4.4.0
付録 B. Gradle で docker build
概要
bmuschko/gradle-docker-pluginを使って、Gradle からdocker build
を実行するタスクを定義する。
準備
下記を実施しておく。
- docker をインストールする
unix:///var/run/docker.sock
で Docker Remote API にアクセスできるようにする
実行
git clone https://github.com/kaakaa/gradle-frontend-boilerplate.git
cd gradle-frontend-boilerplate
git checkout sec_B
./gradlew buildDockerImage
ビルドスクリプト
長くなってきたので掻い摘んで。
plugins {
id 'java'
id 'application'
id 'com.moowork.grunt' version '0.11'
id 'com.moowork.node' version '0.11'
id 'com.bmuschko.docker-remote-api' version '2.6.6' // (1) - GradleからDockerを操作するプラグインを追加する
}
...
/** For docker build */
docker {
url = 'unix:///var/run/docker.sock' // (2) - Docker Remote APIのアドレスを指定する
}
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
task buildDockerImage(type: DockerBuildImage) { // (3) - docker buildを実行するタスクを定義する
dependsOn clean, installDist // (4) - docker buildに必要なファイルを生成するタスクへの依存を宣言する
inputDir = rootDir
tag = 'kaakaa/gradle-frontend-boilerplate'
}
/** Other settings */
task wrapper(type: Wrapper) {
gradleVersion = '2.12'
}
(1) Gradle から Docker を操作するプラグインを追加する
今回はbmuschko/gradle-docker-plugin: Gradle plugin for managing Docker images and containers.を使う。 Gradle で Docker 操作するプラグインは、同じぐらいのスター数でいくつもあるのでデファクトが無い感じ…
- Transmode/gradle-docker: A Gradle plugin to build Docker images from the build script.
- gesellix/gradle-docker-plugin: Gradle Docker plugin
(2) Docker Remote API のアドレスを指定する
予め起動していた Docker Remote API のアドレスを指定する
(3) docker build を実行するタスクを定義する
bmuschko/gradle-docker-plugin
のお作法通り、docker build
を実行するタスクを定義する。
tag 名はお好みで。
(4) docker build に必要なファイルを生成するタスクへの依存を宣言する
installDist
タスクの成果物を Docker イメージに含めるため、buildDockerImage
タスクがinstallDist
タスクのあとに実行されるよう設定している。
ビルドスクリプト(Dockerfile)
FROM java
ADD build/install/gradle-frontend-boilerplate /usr/local/src
ENTRYPOINT ["sh", "-c", "/usr/local/src/bin/gradle-frontend-boilerplate"]
installDist
の成果物を Docker イメージの/usr/local/src
に追加し、起動スクリプトを実行するだけの Dockerfile です。