Maven2+Hudsonによる1clickリリース管理

現在関わっているとあるプロジェクトでは、maven-release-pluginを使用してリリースビルドを行っていました。maven-release-pluginを組み込んだプロジェクトをHudsonからキックすることで、リリース用のアーカイブを作成し、リポジトリにアップロードしていました。

先日、このリリース方式を少し見直したので備忘録としてここにまとめておきます。

新方式の内容

  • 新方式では、maven-release-pluginを使用しないやり方にしてしまいました。
  • 具体的には、Hudsonから「clean deploy scm:tag」を実行するというシンプルなやり方にしました。
  • リリースを行うバージョン番号は、pom.xmlに記述するのではなく、HudsonのParameterized Buildを使ってビルド時に変数として渡してあげる方式にしました。

maven-release-pluginを止めた理由

  • なんと言っても、はまりどころが多すぎます。Mavenそのものが難しいというのもありますが。。。
  • 過去日記に書いていますが、以下の問題に遭遇しています。
  • また、maven-release-pluginの場合、pom.xmlをプラグインの機能で編集してコミットする処理があります。この処理の途中でエラーとなった場合に、元に戻してやり直すことが面倒。手動で元に戻す必要があるので、Hudsonから1clickでリリースしようとするには相性が悪い。
  • その他、maven-release-pluginによるrelease:performでは、内部でMavenをもう1つ実行してビルドを行うようになっているので、ここで思わぬエラーに遭遇することがあります。
  • また、これもHudsonと相性がいまいちな話ですが、ビルドされたartifactはデフォルトではHudsonに認識されません(ファイル指紋の記録などが行われない)。多分、release:perform内で起動されたもう1つのMavenプロセスはHudsonに認識されていないと思われます。

新方式のメリット

  • シンプル
    • 「clean deploy scm:tag」と実行しているだけなので、普段のSNAPSHOTビルドとほとんど変わらないビルドになります。これなら問題が起きにくいはず。
  • Hudsonとちゃんと連携できる
    • maven-release-pluginでのビルドと異なり、デフォルトでファイル指紋の記録も行われますし、成果物も保存されます。
    • また、META-INF/MANIFEST.MFにHudsonの環境(ビルド番号やSVNリビジョン、日付など)を埋め込むことが簡単にできるというのもメリットですね。Hudsonの環境変数についてはhttp://d.hatena.ne.jp/kaorun55/20090210/1234274938で紹介されてます。


まずは3つくらいのプロジェクトをこの方式に変更してみました。しばらく様子を見て、問題なければ他のプロジェクトもこの方式にしようと思います。
具体的なpom.xmlの書き方とか、Hudsonの設定については追々書こうと思います。