GeekFactory

int128.hatenablog.com

JenkinsとApache Ivyで開発からデプロイまでを管理する

Eclipse, Jenkins, Apache Ivyを使ったプロジェクトにおける開発からデプロイまでの流れを図に描いてみました。

図では書き表せないことがありますね。テスト実行時のクラスパスは実行時ライブラリを含むとか、図で描くとカオスになります。GUIツールでビルド設計するのは意外と難しいのかもしれません。

ビルド設計する上で考えたことを書き出しておきます。何かアドバイスがあったら教えていただけると嬉しいです。

  • 開発環境
    • WindowsEclipseを使う。
    • Eclipseのプロジェクト構成で適切なビルドパスを設定する。
    • 依存ライブラリはApache IvyDEプラグインで管理する。
    • 依存ライブラリはMavenリポジトリから取得する。リポジトリ候補にはビルドサーバ上のキャッシュを含める*1
    • 他プロジェクトへの参照はEclipseのProject Referenceを設定する。
    • クラスパス上に開発環境用の設定ファイルを配置する。
    • アプリやテストの実行設定はプロジェクト上にファイルで保存する。
  • インテグレーション環境
    • Windows ServerでJenkinsを使う。
    • Jenkinsがリポジトリを定期的にポーリングし、更新がある場合はビルドを開始する。
    • Antでコンパイル、テスト、パッケージングを実行する。
    • 依存ライブラリはApache Ivyで管理する。
    • 他プロジェクトへの参照はApache Ivyで管理する。プロジェクト間の関係はJenkinsに反映する。
    • JARファイルはIvyリポジトリに登録する。
    • ステージング環境に展開するだけで動くツリーをアーカイブする。
      • Webアプリの場合はWARファイルを生成する。
      • バッチアプリの場合はZIPファイルを生成する。バッチの起動シェルもZIPに含める。
  • ステージング環境
    • Linuxにデプロイする。
    • ビルドサーバからステージング環境に向かってデプロイする。
    • Antからsshでデプロイする。
      1. Ivyリポジトリから最新(latest-integration)のアーティファクトを取得する。
      2. ステージング環境のデプロイ先をクリーンアップする。
      3. ステージング環境にscpする。
      4. ステージング環境で事後処理スクリプトを実行する。シンボリックリンクの配置など。
    • ミドルウェアの設定反映や再起動はJenkinsで実行する。
    • 変更頻度の高いミドルウェア設定はSubversionで管理する。
    • ステージング環境の定時ジョブはJenkinsで実行する。

まとめ

  • ビルドとデプロイはワンクリック。
  • デプロイするものはすべてビルドサーバで生成する。
  • ビルドするものはすべてリポジトリで管理する。
  • ライブラリはすべてMavenやIvyで管理する。
  • 空いた時間でブクマ三昧(だといいなぁ)

*1:ネットワーク帯域が不安定な場合はNexusなどでキャッシュを公開するといいです。Ivyの場合は、Ivyリポジトリフォルダ($HOME/.ivy2)をApache httpdで公開しておくだけでもOKです。