Top Banner
Gradleでビルドして Dockerで配布する JGGUG LT 2014.12.19 @int128
25

GradleでビルドしてDockerで配布する #jggug

Jul 22, 2015

Download

Technology

Hidetake Iwata
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: GradleでビルドしてDockerで配布する #jggug

GradleでビルドしてDockerで配布する

JGGUG LT 2014.12.19@int128

Page 2: GradleでビルドしてDockerで配布する #jggug

@int128 https://github.com/int128

Page 3: GradleでビルドしてDockerで配布する #jggug

Gradle SSH Pluginの作者ですhttps://gradle-ssh-plugin.github.io

Page 4: GradleでビルドしてDockerで配布する #jggug

アプリケーションの提供と利用

について考える

Page 5: GradleでビルドしてDockerで配布する #jggug

リリース手順.xlsこの端末のEclipseで

ビルドしたJARを設定ファイルと一緒に

ZIPで固めてポータルサイトにアップしておいてね

Page 6: GradleでビルドしてDockerで配布する #jggug

使い方.txtポータルサイトから

ZIPをダウンロードして適当な場所に解凍して

java -jar hoge.jarを実行してください

Page 7: GradleでビルドしてDockerで配布する #jggug

つらい

Page 8: GradleでビルドしてDockerで配布する #jggug

提供しやすく利用しやすいアプリケーションの特徴

提供しやすいアプリケーションとは

● 誰でも同じ方法でビルドできる● 環境に依存しない

利用しやすいアプリケーションとは

● 簡単に入手できる● 導入の手間がかからない● 誰でも同じ方法で実行できる

Page 9: GradleでビルドしてDockerで配布する #jggug

提供しやすく利用しやすいアプリケーションの特長

提供しやすいことのメリット

● ニーズに合わせて早く提供できる● 計画や開発にリソースを集中できる

(リアルJenkinsおじさん不要)

利用しやすいことのメリット

● ユーザに好印象を与える● 多くのユーザを獲得できる● 導入が面倒なアプリは損をしている

Page 10: GradleでビルドしてDockerで配布する #jggug

JVMベースのアプリケーション

(Groovy, Scala, Java等)固有の課題

Page 11: GradleでビルドしてDockerで配布する #jggug

JVMベースのアプリケーションの課題

提供側がつらいこと

● コマンドラインツールを配布できるエコシステムがない(RubyGemsとかnpmとか)

● シェルスクリプトやバッチの同梱が面倒

利用側がつらいこと

● JVMのインストールが面倒● JVMのデフォルト引数がいけてないので

ヒープメモリの指定がほぼ必須

Page 12: GradleでビルドしてDockerで配布する #jggug

アプリケーションの提供と利用の形態

Webサービス

➔ 提供側はアプリをインフラにデプロイ➔ 利用側はサービスにアクセス

コマンドラインツールやWebアプリ

➔ 提供側はアプリをWeb上に公開➔ 利用側はダウンロードして利用

Page 13: GradleでビルドしてDockerで配布する #jggug

アプリケーションの提供と利用にGradleやDockerを使う

Webサービス

➔ 提供側はアプリをGradleでビルド➔ 提供側はアプリをDockerでデプロイ➔ 利用側はサービスにアクセス

コマンドラインツールやWebアプリ

➔ 提供側はアプリをGradleでビルド➔ 提供側はアプリをDocker Hubに公開➔ 利用側はDocker Hubから取得

Page 14: GradleでビルドしてDockerで配布する #jggug

GradleでビルドしてDockerで配布する

Page 15: GradleでビルドしてDockerで配布する #jggug

Gradleのメリット

誰でも同じ方法でアプリケーションをビルドできる

● インストール不要でJVMがあれば動く

(Gradle wrapper)● ./gradlew build を叩くだけでアプリを

ビルドできる

● 必要なライブラリは自動的に取得

Page 16: GradleでビルドしてDockerで配布する #jggug

Dockerのメリット

誰でも同じ方法でアプリケーション一式をビルド、配布、実行できる

● docker build を叩くだけでイメージをビルドできる

● docker run を叩くだけでコンテナを実行できる

● Docker HubやPrivate Registryでイメージを配布できる

Page 17: GradleでビルドしてDockerで配布する #jggug

Gradle + Docker のメリット

提供側のメリット

● 誰でも同じ方法でアプリケーション一式をビルドできる

● 統一的な基盤で、アプリケーション一式を配布できる

利用側のメリット

● 誰でも同じ方法でアプリケーションを実行できる

Page 18: GradleでビルドしてDockerで配布する #jggug

GradleでビルドしてDockerで配布

1. Gradleでアプリケーションをビルド2. Dockerイメージを配布3. ユーザはDockerコンテナを実行

Dockerイメージ

Dockerコンテナ

アプリ

OS/JVM

アプリ

OS/JVM依存JARs

ソースコード

設定ファイル

1. ビルド 2. 配布 3. 実行

Page 19: GradleでビルドしてDockerで配布する #jggug

Gradle Application Plugin

アプリケーションの実行に必要なファイル群を生成してくれるプラグイン

● プロダクト本体● 実行時の依存ライブラリ● JVMを起動するシェルスクリプト● JVMを起動するバッチファイル

※Gradleに標準で含まれるプラグイン

Page 20: GradleでビルドしてDockerで配布する #jggug

plugins { id 'groovy' id 'application'}mainClassName = 'org.example.Main'applicationDefaultJvmArgs = ['-Xmx512m']

アプリケーションを配置する

./gradlew installApp

アプリケーションをZIPアーカイブに固める

./gradlew distZip

Gradle Application Plugin の使い方

build.gradle

Page 21: GradleでビルドしてDockerで配布する #jggug

● build/install/groovy-ssh/bin○ groovy-ssh○ groovy-ssh.bat

● build/install/groovy-ssh/lib○ groovy-all-2.3.6.jar○ groovy-ssh-SNAPSHOT.jar○ jna-3.4.0.jar○ jsch-0.1.51.jar○ ...○ platform-3.4.0.jar○ slf4j-api-1.7.7.jar

Gradle Application Plugin の使用例

シェルスクリプト

バッチファイル

プロダクト本体

依存ライブラリ

Page 22: GradleでビルドしてDockerで配布する #jggug

Dockerイメージのビルド時にGradleを実行する

Javaイメージの上でGradleを実行してビルド済みのアプリケーション一式を載せる

Dockerイメージの構成例

ubuntu

dockerfiles/java

myapp

Oracle JDK 7

ビルド済みのアプリケーション一式

OSの最小セット

Page 23: GradleでビルドしてDockerで配布する #jggug

Dockerイメージのビルド時にGradleを実行する例

from dockerfile/java:oracle-java7

volume /usr/src/groovy-ssh

copy . /usr/src/groovy-ssh

run cd /usr/src/groovy-ssh && \

./gradlew -g .gradle installApp && \

cp -a build/install/groovy-ssh /

workdir /groovy-ssh/bin

entrypoint ["./groovy-ssh"]

Dockerfile

Page 24: GradleでビルドしてDockerで配布する #jggug

Dockerを使うとGradle SSH Pluginが

不要になる...oh...

Page 25: GradleでビルドしてDockerで配布する #jggug

まとめ

JVMベースのアプリケーションをGradleでビルドしてDockerで配布する

これにより、

● 提供側は誰でも同じ方法でアプリケーションをビルドできる

● Docker Hubで簡単に配布できる● 利用側は誰でも同じ方法で

アプリケーションを実行できる