はじめに

Java/Spark プロジェクトの Gradle を利用したビルド/デプロイについて、私が試したことをまとめたものです。 (ここで言うSparkは、分散処理ライブラリのApache Sparkではなく、Java の Sinatra ライクな Microframework のSparkのことです)

目次

  1. Hello World アプリ
  2. jade テンプレートエンジン
  3. Grunt/bower による Web パッケージのビルド
  4. 付録 A. TravisCI によるビルド
  5. 付録 B. Gradle で docker build
  6. 付録 C. TravisCI から DockerHub へ docker push

各章でのソースコードは Commits · kaakaa/gradle-frontend-boilerplate から確認できます。

環境

付録 B. Gradle で docker build

概要

bmuschko/gradle-docker-pluginを使って、Gradle からdocker buildを実行するタスクを定義する。

準備

下記を実施しておく。

実行

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 操作するプラグインは、同じぐらいのスター数でいくつもあるのでデファクトが無い感じ…

(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 です。

comments powered by Disqus