はじめに
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行を追加する。