Playframework2.1JavaプロジェクトをJenkins on Ubuntu12.04でデプロイするまでの超ざっくりメモ

Play2.1がリリースされたと言う事で、Play2.1とJenkinsを絡める部分についての設定時のメモを。主に過程を進めていく上で主にScala環境周りで(主に実行権限とかファイルとか)エラーが出たので対処の内容になってます。

とりあえず動かしたレベルなので全然改善の余地ありだし、時間を見て追記更新する予定。

  • Ubuntu12.04
  • Scala 2.9.1
  • Play2.1.0
Play2.1インストール
$ wget http://downloads.typesafe.com/play/2.1.0/play-2.1.0.zip
$ sudo unzip play-2.1.0.zip
$ sudo vi .bash_profile
 ---------------
 # add PLAY env.
 #export PLAY_HOME=/usr/local/bin/play-1.2.5
 export PLAY_HOME=/usr/local/bin/play-2.1.0
 export PATH=$PATH:$PLAY_HOME
 ---------------
$ source .bash_profile
$ which play
/usr/local/bin/play-2.1.0/play
Scala周りの環境整備
  • この時点で試しにPlay実行したら怒られた。
$ play
java.io.FileNotFoundException: /usr/local/bin/play-2.1.0/framework/sbt/boot/update.log (そのようなファイルやディレクトリはありません)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
	at java.io.FileWriter.<init>(FileWriter.java:90)
	at xsbt.boot.Update.<init>(Checks.java:51)
	at xsbt.boot.Launch.update(Launch.scala:275)
	at xsbt.boot.Launch$$anonfun$jnaLoader$1.apply(Launch.scala:120)
	at scala.Option.getOrElse(Option.scala:108)
	at xsbt.boot.Launch.jnaLoader$2f324eef(Launch.scala:115)
	at xsbt.boot.Launch.<init>(Launch.scala:94)
	at xsbt.boot.Launcher$.apply(Launch.scala:290)
	at xsbt.boot.Launch$.apply(Launch.scala:16)
	at xsbt.boot.Boot$.runImpl(Boot.scala:31)
	at xsbt.boot.Boot$.main(Boot.scala:20)
	at xsbt.boot.Boot.main(Boot.scala)
sudo mkdir /usr/local/bin/play-2.1.0/framework/sbt/boot
  • 今度は許可無いって怒られる。
$ play
java.io.FileNotFoundException: /usr/local/bin/play-2.1.0/framework/sbt/boot/update.log (許可がありません)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
	at java.io.FileWriter.<init>(FileWriter.java:90)
	at xsbt.boot.Update.<init>(Checks.java:51)
	at xsbt.boot.Launch.update(Launch.scala:275)
	at xsbt.boot.Launch$$anonfun$jnaLoader$1.apply(Launch.scala:120)
	at scala.Option.getOrElse(Option.scala:108)
	at xsbt.boot.Launch.jnaLoader$2f324eef(Launch.scala:115)
	at xsbt.boot.Launch.<init>(Launch.scala:94)
	at xsbt.boot.Launcher$.apply(Launch.scala:290)
	at xsbt.boot.Launch$.apply(Launch.scala:16)
	at xsbt.boot.Boot$.runImpl(Boot.scala:31)
	at xsbt.boot.Boot$.main(Boot.scala:20)
	at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.io.FileNotFoundException: /usr/local/bin/play-2.1.0/framework/sbt/boot/update.log (許可がありません)
  • 許可与える。
$ sudo chmod -R 777 /usr/local/bin/play-2.1.0/framework/sbt/boot
  • まだ怒られる。
$ play
java.io.IOException: 許可がありません
	at java.io.UnixFileSystem.createFileExclusively(Native Method)
	at java.io.File.createNewFile(File.java:947)
	at xsbt.boot.Locks$.apply0(Locks.scala:34)
	at xsbt.boot.Locks$.apply(Locks.scala:27)
	at xsbt.boot.Update.apply(Checks.java:100)
	at xsbt.boot.Launch.update(Launch.scala:275)
	at xsbt.boot.Launch$$anonfun$jnaLoader$1.apply(Launch.scala:120)
	at scala.Option.getOrElse(Option.scala:108)
	at xsbt.boot.Launch.jnaLoader$2f324eef(Launch.scala:115)
	at xsbt.boot.Launch.<init>(Launch.scala:94)
	at xsbt.boot.Launcher$.apply(Launch.scala:290)
	at xsbt.boot.Launch$.apply(Launch.scala:16)
	at xsbt.boot.Boot$.runImpl(Boot.scala:31)
	at xsbt.boot.Boot$.main(Boot.scala:20)
	at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.io.IOException: 許可がありません
  • 更に許可与える。
$ sudo chmod -R 777 /usr/local/bin/play-2.1.0/repository/
  • 行けた〜。
$ play help
Getting net.java.dev.jna jna 3.2.3 ...
:: retrieving :: org.scala-sbt#boot-jna
	confs: [default]
	1 artifacts copied, 0 already retrieved (838kB/22ms)
Getting play console_2.9.2 2.1.0 ...
:: retrieving :: org.scala-sbt#boot-app
	confs: [default]
	29 artifacts copied, 0 already retrieved (5976kB/66ms)
Getting Scala 2.9.2 (for console)...
:: retrieving :: org.scala-sbt#boot-scala
	confs: [default]
	4 artifacts copied, 0 already retrieved (20090kB/52ms)
       _            _
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/

play! 2.1.0 (using Java 1.7.0_13 and Scala 2.10.0), http://www.playframework.org
Welcome to Play 2.1.0!

These commands are available:
-----------------------------
license            Display licensing informations.
new [directory]    Create a new Play application in the specified directory.

You can also browse the complete documentation at http://www.playframework.org.

$ 

これでPlay2が動くようになった。


ついでJenkins周り。まずは任意のプロジェクト(フリースタイル・プロジェクト)を作成。以降関連する設定を追記して行く。

Jenkins:Mercurialの設定

Repository URL https://(Bitbucketユーザ名):(Bitbucket接続パスワード)@bitbucket.org/(Bitbucketユーザ名)/(リポジトリプロジェクト名)
Branch default
リポジトリブラウザ bitbucket
URL 作成し、プロジェクトをpushしたリポジトリURL

Jenkins:シェルの実行設定

    • 恐らくもっとスマートに書ける方法があるとは思うが、ひとまず『意図した動作をする』コードを書き走ったものを残す。適宜改善して最適なスクリプト文を随時更新の方向で。
sudo chmod -R 777 /var/lib/jenkins/jobs/playfw21java-build/workspace/  …(1)
cd /var/lib/jenkins/jobs/playfw21java-build/workspace/   …(2)
/usr/local/bin/play-2.1.0/play clean compile stage   …(3)
sudo chmod -R 777 project/ target/   …(4)
/usr/local/bin/play-2.1.0/play start &   …(5)
    • (1).実行対象のプロジェクトに権限付与
    • (2).プロジェクト配下に移動(※この前に、プロジェクトをリネーム等したほうが綺麗かもしれない)
    • (3).実行準備諸々
    • (4).Playアプリケーションを実行出来るように権限付与
    • (5). バックグラウンドで実行(start:本番モード run:開発モード)

設定完了後、ビルド実行。ブラウザで確認。

これでひとまずゴール。後は設定内容のスマート化やnginx等の連携設定等も絡めていく方向で。