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

イテレーターに関して

Javaの繰り返しでイテレーターという概念がありますね。 今はあまり使われなくなっているようですが、資格の勉強をしていたら出てきたのと、たしなみとして知っておく必要があるため、記述します。 ソース [ …

no image

JavaScriptライブラリ sugar

去年、JavaScriptの仕事をがりがりやった時にお世話になったライブラリsugar。 JavaScriptのライブラリというとunderscore.jsが有名ですが、こいつも結構使えるライブラリで …

no image

Javaビルドツール

JavaではPHPやRubyなどといったインタプリタ言語とは違い、ソースはクラスファイルといわれるファイルに変換する必要があります。この作業をコンパイルと呼びます。最低限この作業をやらないとプログラム …

no image

JSPでのカスタムタグ

前回のインク―ドですが、文字列以上の情報を渡すことはできませんでした。 いろいろ調べたり、上司に聞いてみるとカスタムタグという独自のタグを作る機能があるとのことでさっそく調査。 Contents1 カ …

no image

glassfishへのデプロイ

いつもJavaEE環境のローカル開発ではNetbeansで動かしてますんで、デプロイに関してglassfishのことをほとんど知らなくても動かせます。 開発や本番環境化では当然そういうわけには行かない …