久々にJavaやりました。
Contents
やりたいこと
- 作成しているアプリはJavaServelet、アプリケーションサーバーはglassfish
- ローカルでgitでコミット→プッシュ
- これをトリガーにしてjenkinsでビルド→デプロイ(デプロイするサーバーは別)
git→jenkins連携はこちらに解説してます。
jenkins構築
Git→Jenkinsの連携
Git→Jenkinsの連携 その2
ハマりポイント
Antでのjobの設定
いままでほとんどmavenだったので・・・
まずビルドファイルはディフォルトでbuild.xmlなら何も書かなくてOKです。下手に書くとファイルがないと怒られます。
jenkinsでビルドできない
Javaだと頻繁にありますがIDEだとOK(ライブラリが内包されているので)だけど、別環境だとダメってパターン。ほとんどがライブラリ関係です。
出たエラーは次の2箇所
1 2 |
The Java EE server classpath is not correctly set up - server home directory is missing. Either open the project in the IDE and assign the server or setup the server classpath manually. For example like this: ant -Dj2ee.server.home=<app_server_installation_directory> |
Jenkinsのjobのビルド→Antの呼び出しでクラスパスをjenkinsの管理画面でAntのプロパティとして設定してあげればOK
j2ee.server.home=/usr/local/glassfish4/glassfish/ で解決
j2ee.server.home missing during NetBean project build
1 2 3 4 5 6 7 8 |
The libs.CopyLibs.classpath property is not set up. This property must point to org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part of NetBeans IDE installation and is usually located at <netbeans_installation>/java<version>/ant/extra folder. Either open the project in the IDE and make sure CopyLibs library exists or setup the property manually. For example like this: ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar |
org-netbeans-modules-java-j2seproject-copylibstask.jarが入っていないためにエラーが起こる。(ローカルだとnetbeansには入っている)
このjarファイル自体をWEB-INFの中に入れてあげて
1 |
libs.CopyLibs.classpath=/var/lib/jenkins/jobs/webScan/workspace/web/WEB-INF/lib/org-netbeans-modules-java-j2seproject-copylibstask.jar |
とパスを先ほどと同様Antのプロパティに設定してあげればOK
The libs.CopyLibs.classpath property is not set up
jenkinsのオートデプロイ
これに関しては↓
glassfishへのデプロイ
今回はできたwarファイルをSSHでjenkinsサーバーからtestサーバーに運んであげる
SSHでの運び方
※最初はアプリをビルドさせる処理と送信のジョブを別々にしたほうが良いかも。
- SSH2Easy Pluginというプラグインをインストール
- あとはJenkinsの管理画面→システムの設定→Server Group Centerにhostやuserなど必要な情報を入れる
- 1度保存後、ServerListが保存できるのでここでServerGroupを選択し、Servernameをきめてあげ、IPを入れる
- プロジェクト選択画面に遷移し、ビルドの手順の追加よりRemoteSFTPUPLOADを選択、さきほど入力したものが選ばれているはず
- localFilePath 送る側のファイルパス remoteLocation 送られる側のファイルパス fileName ファイル名をリネームしたいとき。リネームしなくていい場合は空
最初はただのテキストファイルを送るといいかも。
testサーバーでのデプロイ
warファイルはそのままglassfishディレクトリのautodeployの中に入れてあげれば自動でWEBからアクセスできるように展開されている。
The libs.CopyLibs.classpath property is not set up
jenkinsでは「SSHでの運び方」で記述したようにServer Group Centerを設定してあげればSSHで対象のサーバーにログインして操作ができます。
ビルドの手順の追加より「Remote Shell」を追加し、Serverを選んであげて、Shellの中にコマンドを記述してあげればOKです。
これで意図したパスにファイルをおいてあげればOKです。