skillup

技術ブログ

Java プログラミング全般

CIことはじめ

投稿日:

業務でJavaのテキスト変換ツールを作成。

プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。

今回やりたかったことは下記の通りです。いわゆるCIの初歩です。

  1. ローカルでNetbeansを使って、コーディング
  2. 出来上がったらGitで開発サーバーにアップ&redmineと連携
  3. jenkinsでビルド&デプロイ
  4. 他のメンバーがそこからダウンロードして使う。

という流れです。

まずやりたかったことですが、以下の点がポイントです。

  • 実行ファイルと設定系の情報ファイルをわけ、実行ファイルはjar形式にして固める。
  • 設定系のファイルは変更する可能性があるためjarにいれず、そのままディレクトリの中においておく(jarにいれてもいいのかもしれませんが練習のため)
  • デプロイされた成果物はjava -jar で実行し、同じディレクトリにある設定ファイルを指定すれば処理が無事に実行される。

これがnetbeansがない環境でもできるようにしないといけないです。(ビルド&デプロイはjenkinsが行うため。)

なのでまずやっておくこととして、下記の処理を行います。

設定系のファイルをjarにいれない

これはNetbeansで除外の設置をしておきます。

jarファイルから除外ファイルを作りたいとき

Netbeansのプロジェクトのディレクトリで
右クリック→プロパティ→ビルド→パッケージングで「JARファイルから除外」を選択。

除外パターンは下記の通りです。(それぞれのパターンはカンマ区切りで定義。)
regex.csvを除外したいとき
**/regex.csv
sampleディレクトリを除外したいとき
**/sample/
拡張子がpropertiesのファイルを除外したいとき
**/*.properties

これで設定系のファイルを除外することができます。

jenkins環境下でビルド&デプロイ

予備知識として、

Netbeansでの実行→コンパイルし、クラスファイルの起動
ビルド→Antやmavenを元にclean,compile,test,jarなどの処理

※netbeansでビルドしたときに出力を見ると何をしているかわかります。
※clean,compileなどの動作のことをターゲットといいます。

今回はAntを使いましたが、mavenでも流れは一緒だと思います。

NetbeansでビルドをしたときはAntがbuild.xmlを実行しています。

ためしに、antを直で実行すると自分でbuildできます。

netbeansの場合、AntのパスはC:\Program Files\NetBeans 8.0.2\extide\ant\bin
なので、ここに移動し、

ant -f ビルドファイル ターゲット

と入力してあげれば処理が始まります。jenkinsでも同様のことを行います。

jenkinsのプロジェクトの画面に移動し、

ビルドでAntの呼び出し、

使用するAnt:Ant

ターゲット:jar(buildなどでもよいかもしれません。)

ビルドファイル: ./build.xml

と入力してあげればビルド実行時にAntがbuild.xmlを読み込んでビルド&デプロイをしてくれます。(無事にjarファイルができます。)

※注意!

jenkinsはJavaやAnt,mavenなどを自動でインストールできます。逆に言うとjenkinsを使わずにインストールした場合、下記エラーがでます。

FATAL: Cannot find executable from the chosen Ant installation “Ant”

Error: JAVA_HOME is not defined correctly.

この場合、Jenkinsの設定画面でAntやJavaのインストールパスを設定してあげないと正常に動きません。コマンドからecho $JAVA_HOMEとかやっても普通に存在しているのにjenkinsでは動かないということがおきてしまいます。

ビルド後の処理

が、このままだと設定系のファイルがjarと同じディレクトリにありません。srcディレクトリにはあるんですがいちいち別々にダウンロードするのはもったいないため、
コピーコマンドでコピーするようにしました。

jenkinsではビルド後に任意の処理を実行することができます。(ようやく便利さがわかってきたかも・・・)

個々のプロジェクトの画面に移動し、ビルド→ビルド手順の追加→シェルの実行を選んで下記コマンドを実行。

cd /var/lib/jenkins/jobs/replaceTemplate/workspace/
cp -pr ./src/templatereplace/regex.csv ./dist/
cp -pr ./src/templatereplace/config.properties ./dist/
cp -pr ./src/templatereplace/sample ./dist/

regex.csv、config.properties、sampleというファイルとディレクトリをdist以下に移動させることが目的です。

これで一通り、ビルド&デプロイが終了しました。ほんとはテストまでやらないといけないのですが・・・また後日。

他にも他の環境で実行させるときにネックがひとつあったのでメモ

javaで実行中のファイルのディレクトリを取りたいとき

String jarPath = System.getProperty(“java.class.path”);
String dirPath = jarPath.substring(0, jarPath.lastIndexOf(File.separator)+1);
props.load(new FileInputStream(dirPath + “hoge.properties”));

で表示できます。意外に情報なかったんで書いときました。

 

-Java, プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

JavaSEでのCDI

以前、JavaSEでもCDIを使ってみたい!と思ったのですが、以前は探し方が悪かったのか情報を見つけ出すことができませんでした。 が、昨日ちょっと検索したらちょっと情報があり、無事実装できたのでメモし …

no image

persistence.xmlのプロパティについて

JavaEEではデータベースとの設定情報はpersistence.xmlに記述します。 (ユーザー名、パスワード、ポート、driver名、データベース名などの情報はglassfish-resource …

no image

テストコードを読みやすくする

リーダブルコードも最終章に近づいてきましたね。 今回はテストコードについて。 以前のプロジェクトではテストコードを書いていたのですが、今携わっているプロジェクトでは書いてないです・・・ テストを書く目 …

no image

オブジェクト指向 値オブジェクトの活用と場合分けに関して

オブジェクト指向 その1 オブジェクト指向 その2 オブジェクト指向 その3 でオブジェクト指向に触れたんですが、基本から勉強しなおす必要があると思い、まとめ&追記 参考文献 現場で役に立つシステム設 …

no image

Mapからインスタンス変数、インスタンス変数からMapへ

Javaで変数を引き回すときにMapからインスタンス、インスタンスからMap、あるインスタンスから別のインスタンスに変数を差し替える作業って結構多いと思います。 これって普通にやるとMapのget,p …