Java1.7のplay2.2でTravis CIからherokuデプロイまでやった
Javaで書いてるplayframework2.2.2のWebアプリをgithubにpushするだけで、Travis-CIでtest実行してherokuにデプロイする話です。
環境とかバージョンとか
- 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用なので、見事エラーでハマってこちらを参考にしました。
ローカルは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する。rubyはbrewでinstall済み。参考
$ gem install travis -v 1.6.8 --no-rdoc --no-ri
なんか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すると結果こうなる。
おわり
まだ書籍読み終わってないけど、play結構わかってきた感ある。
ScalaベースだからみんなScala行っちゃうせいか、Javaの情報が若干不足気味?
heroku無料でここまで出来るのすばらしい感謝。Travis CI気持ちいい感謝。githubいろいろまとめてくれて助かります感謝。
ちなみに今回の連携できてるサンプルプロジェクトがこちらになります。.travis.ymlとか設定でわからなかったらこちら見ていただければと。