Hudsonのアップグレード

はじめに

Hudsonは、コアコミッタの方々が日々機能改善やバグ修正を実施してくださっているので、Loading... の通り、比較的頻繁にアップグレード版がリリースされています。このため、Hudsonは特定のバージョンを利用し続けるよりも、定期的に最新のバージョンに入れ替えて利用する方が良いと思います。
そこで、この記事では基本事項ではありますが、アップグレードの方法について説明したいと思います。


以下では、Hudsonの起動方法の違いを簡易的に表現するためのアイコンを用います。
   : Hudsonをコマンドシェルから起動することを表します
   : HudsonをWindowsのサービスとして起動することを表します
   : HudsonをTomcatに配備して起動することを表します

アップグレードの前に

Hudson本体とHUDSON_HOMEの関係について

Hudsonが必要とするディレクトリは、次の2つです。

  1. 「Hudsonの本体を配備したディレクトリ (hudson.warの内容を配備したディレクトリ)」
  2. 「Hudsonの環境を構築したディレクトリ (HUDSON_HOMEディレクトリ)」


これら2つのディレクトリの関係は、次のとおりになっています。

  • または の場合は、次のとおり、HUDSON_HOMEディレクトリの中にHudsonの本体が配備されます
HUDSON_HOMEディレクトリ (このディレクトリの中に、Hudsonの環境が構築される)
  +---...
  +---war (このディレクトリの中に、Hudsonの本体が配備される)
  • の場合は、次のとおり、HUDSON_HOMEディレクトリの中にはHudsonの本体が配備されません
HUDSON_HOMEディレクトリ (このディレクトリの中に、Hudsonの環境が構築される)
  +---...
  +---...
Tomcatのホームディレクトリ
  +---...
  +---webapps
      +---...
      +---hudson (このディレクトリの中に、Hudsonの本体が配備される)


「アップグレードすること」=「Hudsonの本体を入れ替えること」なので、

  • または の場合は、「war」の内容
  • の場合は、「hudson」の内容

を新しい「hudson.war」の内容で入れ替えれば、アップグレードが完了します。

バックアップの取得について
  • 「Hudsonの本体を配備したディレクトリ」のバックアップ

このディレクトリの内容は、通常は「hudson.war」の内容と一致しているはずなのでバックアップを取得する必要はありません。
誤って削除してしまったとしても、今まで使用していたHudsonと同じバージョンの「hudson.war」を再配備するだけで元の状態に戻すことができます。

  • 「Hudsonの環境を構築したディレクトリ」のバックアップ

私自身、アップグレードによってHudsonの環境が壊れたことはありませんが、安全を期すならこのディレクトリの内容は、バックアップを取得する必要があります。
バックアップ方法は単純で、HUDSON_HOMEディレクトリの内容を丸ごとコピーすればOKです(Administrating Hudson - バックアップとリストア参照)。

Proxyの設定について

Hudsonがアップデートサイトにアクセスできる状態になっていると、アップグレードに関して次の恩恵が受けられます。

  • 新しい「hudson.war」の有無を自動表示
  • 新しい「hudson.war」への自動アップグレード

Proxy経由でないと外部にアクセスできないネットワーク環境の場合は、この恩恵を受けるために、次の手順でProxyを設定する必要があります。

  • Hudsonのトップ画面で[Hudsonの管理]を選択し、続けて[プラグインの管理]を選択します。

  • [高度な設定]タブを選択し、続けてサーバー、ポート番号、ユーザ名、パスワードを入力してから、[保存]を押します。

シャットダウンモードについて

Hudsonには、様々なタイミングで「ビルドの実行」要求が投入されます。また、実行中のビルドが存在している可能性もあるので、Hudsonを「唐突に」停止させるわけにはいきません。
このため、Hudsonには「唐突でないタイミング」を作り出すための「シャットダウン機能」が備えられています。
「シャットダウン機能」を使用してシャットダウン状態に移行すると、シャットダウン状態がキャンセルされるまでの間、新しく投入された「ビルドの実行」が保留されます。このため、シャットダウン状態に移行して、移行前に実行中であったすべてのビルドが終了するのを待つことで、「唐突でないタイミング」で安全にHudsonを停止させることができます。

  • シャットダウン状態に移行する場合は、[Hudsonの管理]を選択し、続けて[シャットダウンの準備]を選択します。

  • 「シャットダウン中です。」のメッセージが画面内に常に表示されるようになり、新しいビルドが実行されなくなります。

  • シャットダウン状態をキャンセルする場合は、[Hudsonの管理]を選択し、続けて[シャットダウンのキャンセル]を選択します。

  • 「シャットダウン中です。」のメッセージが画面内に表示されなくなります。


注意: シャットダウン状態は、Hudsonを再起動した場合にもキャンセルされるので注意してください。

Hudsonのアップグレード

Hudsonのアップグレード ( の場合)
  • 以下の手順でHudsonを操作します。(http://localhost:8080/ でHudsonが稼動していると仮定します)。
  • Hudsonをシャットダウンモードにして、実行中のビルドが無くなるのを待ちます。
  • Hudsonのトップ画面で[Hudsonの管理]を選択し、続けて[自動でアップグレード]ボタンを押します。


補足: アップグレード可能なバージョンが存在しない場合は、[自動でアップグレード]ボタンが表示されません。

  • [hudson.war]のダウンロードとインストールが開始されます。

  • 「成功」と表示されれば、アップグレード成功です。

  • Hudsonを起動しなおして、Hudsonのトップ画面にアクセスし、Hudsonの画面右下のバージョン番号が新しくなっていれば、アップグレード完了です。

Hudsonのアップグレード ( の場合)
  • 以下の手順でHudsonを操作します。(http://localhost:8080/ でHudsonが稼動していると仮定します)。
  • Hudsonをシャットダウンモードにして、実行中のビルドが無くなるのを待ちます。
  • Hudsonのトップ画面で[Hudsonの管理]を選択し、続けて[自動でアップグレード]ボタンを押します。


補足: アップグレード可能なバージョンが存在しない場合は、[自動でアップグレード]ボタンが表示されません。

  • [hudson.war]のダウンロードとインストールが開始されます。

  • 「成功」と表示されれば、アップグレード成功です。 本来はここで[ジョブが実行中でなければ再起動]を押すことになるはずですが、Windowsサービスとは別の新たなHudsonが起動してしまうというバグがあるようなので、押してはいけません。(2011/1/3追記: このバグはHudson 1.392で修正されています)

  • 代わりに、Windowsサービスを開いてhudsonを選択し、[サービスを再起動]を押します。

  • Hudsonのトップ画面にアクセスして、Hudsonの画面右下のバージョン番号が新しくなっていれば、アップグレード完了です。

Hudsonのアップグレード( の場合)
  • 以下の手順でHudsonを操作します。(http://localhost:8080/hudson/ でHudsonが稼動していると仮定します)。
  • Hudsonをシャットダウンモードにして、実行中のビルドが無くなるのを待ちます。
  • Hudsonのトップ画面で[Hudsonの管理]を選択し、続けて[ダウンロード]リンクを選択して新しい「hudson.war」をダウンロードします。


補足: アップグレード可能なバージョンが存在しない場合は、[ダウンロード]リンクが表示されません。

  • [アプリケーション]セクション内の[/hudson]の[配備解除]を選択します。

  • [OK]を押して、[配備解除]を続行します。

  • 暫く待つと画面がリフレッシュされ、[アプリケーション]セクション内から「/hudson」が削除されます。


補足: この時点で、Tomcatのホームディレクトリ内の「webapps\hudson」ディレクトリも削除されます。

おわりに

  • アップグレードする際は、安全を期してシャットダウンモードを用いて、実行中のビルドが無い状態にしてから操作してください。
  • アップグレードする際は、安全を期してHUDSON_HOMEディレクトリのバックアップを取得してください。これで、アップグレード後に挙動がおかしくなったとしても、「バージョンアップ前のhudson.war」と合わせて、Hudsonの環境を簡単に復元できます。
  • HUDSON_HOMEディレクトリの設定を変更しない限り、今まで使用していたHUDSON_HOMEディレクトリを用いて新しいバージョンのHudsonを稼動させることができます。