きょこみのーと

技術に関係ないほうのブログ

Java1.7のplay2.2でTravis CIからherokuデプロイまでやった

Javaで書いてるplayframework2.2.2のWebアプリをgithubにpushするだけで、Travis-CIでtest実行してherokuにデプロイする話です。

f:id:kyokomi:20140330212715p:plain

playなのにscalaじゃなくてjavaなのです。

環境とかバージョンとか

  • Java 1.7.0_51
  • playframework 2.2.2

事前に必要なもの

  • githubアカウント
  • Travis CIアカウント(github連携)
  • herokuアカウント(github連携してるといいかも)
  • play testが実行できるJavaのplayframeworkで作ったWebアプリケーション

各サービスの登録とかは済ませてください。herokuもアプリケーション作成までしちゃってください。

herokuのpostgresqlはデフォルトであったきがする。

参考書籍

やっと2部に突入。

1. herokuへのデプロイ設定

Procfileが必要です。

ただし、参考書籍の内容はバージョンが古いplay用なので、見事エラーでハマってこちらを参考にしました。

Play2.2をherokuで動かした時にはまったポイント

ローカルはh2でherokuはpostgresql設定

build.sbtにpostgresqlを追加する。H2はデフォで入ってるからそもそもいらない。

build.sbt

libraryDependencies ++= Seq(

  ... 省略 ...

  "postgresql" % "postgresql" % "9.1-901-1.jdbc4"
)     

Procfile

Pricfileはプロジェクト直下に置く。

一応内容を説明すると

herokuの時だけpostgresqlにし、DBのurlはherokuに$DATABASE_URLという環境変数があるのでそれを使う指定

-Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=$DATABASE_URL

あと初回アクセス時に手動でデフォルトDBを作成してたのを自動化しないといけないやつの指定

-DapplyEvolutions.default=true

herokuでJava1.7つかう指定

system.propertiesが必要です。プロジェクト直下です。

デフォルトでJava1.6でビルドしちゃうので。公式のこちらを参考にしました。

system.properties

java.runtime.version=1.7

2. Travis CI連携

こちらを参考にしました

TravisからHerokuへのデプロイ自動化が簡単すぎて感動した話。

実際。上記の記事にも書いてあるとおり、公式のIntroducing Continuous Deployment to Herokuもわかりやすいので一読しておくといいかと。

とりあえずplay testまでの.travis.ymlを書く

プロジェクト直下に置きます。

.travis.yml

language: java
env:
- PLAY_VERSION=2.2.2
before_script:
- wget http://downloads.typesafe.com/play/${PLAY_VERSION}/play-${PLAY_VERSION}.zip
- unzip -q play-${PLAY_VERSION}.zip
script: play-${PLAY_VERSION}/play test

ここで一旦githubにpushしてtravis連携してplay testまで走るかみてもいいかも。

herokuへのdeployに必要なapi keyを暗号化setup

.travis.ymlを書き込んでくれるので、ymlがあるディレクトリに移動します。(プロジェクト直下)

gemでtravisをinstallする。rubybrewでinstall済み。参考

$ gem install travis -v 1.6.8 --no-rdoc --no-ri

travisコマンドでgithubログインする。

なんかpath通ってなかったので、とりあえずフルパスで(どうせ今回しか使わないだろう。。。とか思ってると、また奴がくる)

$ /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/travis-1.6.8/bin/travis login  --pro

githubのusernameとpass聞かれるからいれてね。

ログイン成功したら、travisコマンドでsetup herokuする。

$ /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/travis-1.6.8/bin/travis setup heroku

yes yesとすすめていくと終わり。


これで、Travis CIからherokuへのdeploy設定終わり。

.travis.ymlを開くと、deploy:が追記されてapi-keyとか暗号化されたのが設定されてていい感じになってます。

そんでgithubにpushすると結果こうなる。

Travis CIビルド結果

おわり

まだ書籍読み終わってないけど、play結構わかってきた感ある。

ScalaベースだからみんなScala行っちゃうせいか、Javaの情報が若干不足気味?

heroku無料でここまで出来るのすばらしい感謝。Travis CI気持ちいい感謝。githubいろいろまとめてくれて助かります感謝。

ちなみに今回の連携できてるサンプルプロジェクトがこちらになります。.travis.ymlとか設定でわからなかったらこちら見ていただければと。

kyokomi/PlaySampleAppのgithub