はじめに
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です。