Play Framework 2.1 を CloudBees であれこれしてみた記録。 Application ContainerとしてTomcat7(Server3.0)に乗せられる構成にしてみる。
- CloudBeesのアカウントを持っていること。
- CloudBeesのアカウントページで国を選択すると日本語の画面に変わるのでやっておく。
- CloudBeesでClickStackからTomcat7を選択し、Tomcat7-Application,Git-Repository,Database,Jenkins-Jobを自動作成しておくこと
- Play2.1.0をダウンロードし、空白を含まないパスに展開して、Pathを通してあること
- Oracle JDK1.7を展開し、JAVA_HOME環境変数の定義がされていること
さくっと作成。Javaもよし、Scalaもよし。
ローカルマシン上で、Play2.1.0直下に次の内容を記したファイルを作成し、sbtコマンドを利用可能にする
sbt.bat(Windows以外はsbt.sh。内容の違いは読みかえること)
@echo off
java -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M -jar "%~dp0framework\sbt\sbt-launch.jar" %*
このサイトを参考に、play warコマンドが通るようにする。
https://github.com/dlecan/play2-war-plugin/wiki/Configuration
さらにTomcat7コンテナではPlay2のログが悪さをする?その対処をやっておく。
そんな話・・・play2war/play2-war-plugin#80
なおし方・・・https://github.com/dlecan/play2-war-plugin/wiki/ConfigurationLoggingJBoss7
修正例:project/Build.scala
import play.Project._
import com.github.play2war.plugin._
object ApplicationBuild extends Build {
val appName = "smphone"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
javaCore,
javaJdbc,
javaEbean,
"com.github.play2war.ext" %% "redirect-playlogger" % "1.0.1"
)
val main = play.Project(appName, appVersion, appDependencies)
.settings(Play2WarPlugin.play2WarSettings: _*)
.settings(
// Add your own project settings here
Play2WarKeys.servletVersion := "3.0"
)
}
修正例:project/plugins.sbt ※空白行にも意味があるので気をつけること!
// Comment to get more information during initialization
logLevel := Level.Warn
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("play" % "sbt-plugin" % "2.1.0")
// Use the war sbt plugin for Play projects
addSbtPlugin("com.github.play2war" % "play2-war-plugin" % "0.9")
すると play war コマンドはもちろん、sbt war コマンドも成功するはずなので確認しておくこと。
ローカルマシン上で、ssh-keygen コマンドなどで、公開鍵と秘密鍵のセットを作っておく。
次に、ローカルマシンからgit.cloudbees.comに接続するときに、作成した秘密鍵を使うように設定する。
-
%userprofile%.ssh\config(Windows以外は~/.ssh/config) に以下を追記。
Host git.cloudbees.com Hostname git.cloudbees.com port 22 IdentityFile "(ホームディレクトリ)\.ssh\(秘密鍵の名前)" TCPKeepAlive yes IdentitiesOnly yes
そしてCloudBees上で、アカウントの設定画面のSecurity Keyのページから、公開鍵を登録。
さぁこれでローカルマシンで作ったPlay Framework 2.1.0のソースコードがGitリポジトリにpush出来るはず。
CloudBeesで、Jenkinsのページを開くと、ジョブが自動作成されているはず。 しかも動いた形跡があるはず。 それはGitリポジトリにpushすると自動的にジョブが起動し、Tomcat7-Applicationにデプロイされる仕組みまで自動作成してくれているから。 なのでここでは内容の確認とジョブの修正を行う。
まず、Jenkinsに Jenkins sbt plugin をインストールし、システムの設定ページを修正する。
プラグインのインストール後、システムの管理を開き、sbt の段落で sbt launch jars を追加する。
Name:sbt-0.12.2
Path:/opt/sbt/sbt-launch-0.12.2.jar
次に、ジョブの設定を変更する。
-
CloudBees DEV@cloud Authorizatio - JDK の設定:Oracle JDK 1.7 を選択する
-
ビルド・トリガ:Build when a change is pushed to CloudBees Forgeにチェックがついているはず。
Gitリポジトリにpushすると自動的にジョブが起動する設定がこれ。 -
ビルド:シェル実行になっていると思うが、これを jenkins sbt plugin を利用したものに変える。
ビルド手順のボタンから build using sbt を選択。以下のように入力する。
※もともとあったビルド手順は削除する。sbt launcher:sbt-0.12.2 JVM Flags:-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M sbt Flags:-Dsbt.log.noformat=true Actions:clean compile war
-
ビルド後の処理:配備するwarの指定を変更する。
Deploy Applications - Host service - Applications - Application - First Match - Application file:target/*.war
これでOK。CloudBeesのGitリポジトリにpushすれば、自動的にTomcat7へPlay2アプリケーションが配備されるはず。
CloudBeesのAppsのページから、作成したアプリケーションのconfigureページを開く。ここからアプリケーションの状態の確認やログの取得が行える。