はじめに

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 から確認できます。

環境

付録 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行を追加する。

comments powered by Disqus