はじめに
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
付録 C. TravisCI から DockerHub へ docker push
概要
Github への Push を契機に TravisCI で Docker ビルドを行い、Docker イメージを DockerHub へ Push する
TravisCI 上では Docker Remote API が起動していなさそうなので、先ほど作ったbuildDockerImage
タスクは使用せず、普通のdocker build
コマンドで Docker イメージを作成する。
ビルドスクリプト
sudo: required // (1) - Dockerを使うことを宣言
services:
- docker
language: java
jdk:
- oraclejdk8
env: // (2) - Dockerビルド、DockerHubへのPushに使う情報を宣言する
global:
- REPO=kaakaa/gradle-frontend-boilerplate
- COMMIT=${TRAVIS_COMMIT::8}
- TAG=${COMMIT}
- secure: <encrypted env>
- secure: <encrypted env>
- secure: <encrypted env>
script: "./gradlew build"
deploy:
provider: releases
api_key:
secure: <encrypted repo>
file:
- "./build/distributions/gradle-frontend-boilerplate-1.0-SNAPSHOT.tar"
- "./build/distributions/gradle-frontend-boilerplate-1.0-SNAPSHOT.zip"
on:
repo: kaakaa/gradle-frontend-boilerplate
tags: true
after_deploy: // (3) - Dockerビルド、DockerHubへのPushをする
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker build -f Dockerfile -t $REPO:$COMMIT .
- docker tag $REPO:$COMMIT $REPO:$TAG
- docker push $REPO:$COMMIT
(1) Docker を使うことを宣言
Travis ビルドでdocker
コマンドを使用するには、この3行が必要。
Using Docker in Builds - Travis CI
(2) Docker ビルド、DockerHub への Push に使う情報を宣言する
Docker イメージ名や DockerHub へ Push する際の名前の情報などを宣言している。${TRAVIS_COMMIT}
は Travis でのビルドが走る際の git のコミット ID を示しており、${TRAVIS_COMMIT::8}
で、その先頭8文字を取得できる。
Environment Variables - Travis CI
secure
文字列は DockerHub へのログイン情報を encrypt した文字列。
下記のコマンドで生成できる。
travis encrypt DOCKEREMAIL=hoge@exampl.com --add env.global
travis encrypt DOCKER_USER=kaakaa --add env.global
travis encrypt DOCKER_PASS=password --add env.global
Using Docker in Builds - Travis CI
Encryption keys - Travis CI
(3) Docker ビルド、DockerHub への Push をする
docker コマンドを普通に打ってるだけ。
Travis では Docker Remote API が起動してないので gradle のbuildDockerImage
タスクが使えないのが悲しい。
ビルドスクリプト
build.dependsOn installDist
Travis 上で実行しているbuild
タスクが、Docker ビルドで必要なファイルを生成するためのinstallDist
タスクに依存するよう、どこかに上記1行を追加する。