読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

開発しています



MacOSX版 Hudson CI → Jenkins CI 実施しました

Java

2011-02-19の日記に書いていた、Jenkinsへのマイグレーションを行いました。
思ったよりは少しだけ時間がかかってしまいましたが、無事移行できました。


今回インストールしたのは、Jenkins ver.1.441です。移行前のHudsonのバージョンを残しておくのを忘れてしまいました。たぶん300番台後半だったかと思います。


前準備

.hudsonディレクトリのバックアップを行います。
バックアップは定期的にとっているので次へ。

試しにWindowsにインストール

バックアップから復旧できるかどうかも兼ねて、WindowsXPにインストールしてみました。
インストーラ付きでインストールすると、デフォルトでは"C:\Program Files\Jenkins"にインストールされ、このディレクトリ自体がHOMEディレクトリになり、ここに各種ファイル(war展開、jobs、ログなど)が格納されます。
個人的にはProgram Filesの中を直接作業ディレクトリとするのはどうかと思いますが...


サービスにも自動登録されますので、インストール後、"http://localhost:8080"にアクセスすればすぐにダッシュボードが見られます。
HOMEディレクトリの下にjobsディレクトリがあるので、Jenkinsのサービスを止めてからバックアップの".hudson/jobs"を上書きし、再度起動します。ちゃんと復元できました。

MacOSXにインストール

残念ながらMacPortsでインストールできないので、インストーラでインストールしてみました。

まずは普通にインストールします。こちらの記事を参考にさせていただきました。

ただし、このままでは動きません。いったん"launchctl unload"で落とします。


動かない理由は、参考記事に書かれているように、Homeディレクトリは"/Users/Shared/Jenkins/Home"なのに、ディレクトリは"/Users/Shared/Jenkins"までしか作られていないためです。デフォルトでは"daemon"ユーザで起動するので、ディレクトリの所有者を"daemon"にしてHomeディレクトリを作成します。
起動オプションは、これも参考記事に倣ってdefaultsコマンドを使って設定しました。8080番ポートは使用済みで、Hudsonも8888番だったので合わせます。外部からはApache経由なので、これもHudsonの時と同様にprefixをつけます。

defaults write /Library/Preferences/org.jenkins-ci httpPort 8888
defaults write /Library/Preferences/org.jenkins-ci ajp13Port 8889
defaults write /Library/Preferences/org.jenkins-ci prefix Jenkins

この状態で起動すると、プロセスは

/usr/bin/java -jar /Applications/Jenkins/jenkins.war --prefix=/jenkins --httpPort=8888 --ajp13Port=8889

のようになります。localhost:8888/jenkins/ にアクセスすると、初期化が実行され、ダッシュボードが見えました。

ジョブを移行

再びJenkinsを停止します。初期化が成功し、"${JENKINS_HOME}"に各種ファイルが展開されていますので、Windowsと同じく、"${JENKINS_HOME}/jobs"に".hudson/jobs"を上書きします。
これで基本的に問題なく動く...と思いましたが、参照だけなら問題なかったものの、ビルドを実行したら即エラーの赤い●が出ます。
結果的には、問題は数箇所ありました。ただし細かく検証していないので要点だけ書きます。

  • ジョブ設定しか移行していないので、VCS(SVN,CVS)の認証情報が無い
  • daemonユーザで実行しているので、root所有ディレクトリの書き込み権限が無い
  • daemonユーザで実行しているので、環境変数PATHが違っていてローカルコマンドが実行できない

面倒なので、実行ユーザをHudsonの時と同じくrootにし、VCSの認証情報は設定画面で設定しなおしました。


以上でマイグレーションは完了です。つまづく箇所が多かった気はしますが、基本的にはマイナーバージョンアップ程度の労力で済んだかと思います。