2011-02-19

Hudson to Jenkins (トライアル)

1. まずはいつも通り考えなしに

そろそろHudsonの騒動(?)も落ち着いてきたことと、曽我部さんがEmail Extension Pluginの修正をしてくださっているようなので、バージョンアップを止めていた某Hudsonも更新しなくちゃな…と思い出しました。

ただし、メインで皆で利用しているHudsonは、いきなり変えるとまずいので、まずはよろず目的で使っているHudsonを変更し、移行のノウハウを貯めることに。

バージョンアップに当たっては、毎時実行しているジョブもあるので、いきなり変更はまずいだろうから、jenkins.war をダウンロードして、別ポートで起動して確認しよう...と思いました。

でも、『そういえばCentOSは、rpmでインストールできるんだった….』ということに気が付き、jenkins-ci.orgをチェックすると、RPMのインストール手順も、ちゃんとJenkins用に書き換わっていたのでした。

手順を見て、じゃあKeyのインポートだけしようかな….というつもりが、ついつい、 指は yum install jenkins  と打ち込んでいました…。

* * *

面白かったので、下記、インストールログ。(一部省略)

# sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
--2011-********-- http://pkg.jenkins-ci.org/redhat/jenkins.repo
pkg.jenkins-ci.org をDNSに問いあわせています... 63.246.20.93
pkg.jenkins-ci.org63.246.20.93:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 76 [text/plain]
`/etc/yum.repos.d/jenkins.repo' に保存中
100%[===================================================>] 76 --.-K/s 時間 0s
(6.40 MB/s) - `/etc/yum.repos.d/jenkins.repo' へ保存完了 [76/76]
# sudo rpm --import
http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
# yum install jenkins
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
* addons:
ftp.jaist.ac.jp
* base: ftp.jaist.ac.jp
* extras: ftp.jaist.ac.jp
* rpmforge: fr2.rpmfind.net
* updates:
ftp.jaist.ac.jp
…………
80 packages excluded due to repository priority protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package jenkins.noarch 0:1.397-1.1 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=============
Package Installing:
jenkins noarch
replacing hudson.noarch 1.371-1.1
Transaction Summary
=====================================
Install 1 Package(s)
Upgrade 0 Package(s)
otal download size: 35 M
Is this ok [y/N]: y
Downloading Packages:
jenkins-1.397-1.1.noarch.rpm 35 MB 01:59 Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : jenkins 1/2 mv: cannot stat `/var/lib/hudson/*': そのようなファイルやディレクトリはありません
Erasing : hudson 2/2 warning: /etc/sysconfig/hudson saved as /etc/sysconfig/hudson.rpmsave
warning: /etc/init.d/hudson saved as /etc/init.d/hudson.rpmsave
Installed:
jenkins.noarch 0:1.397-1.1
Replaced:
hudson.noarch 0:1.371-1.1
Complete!

サービの確認をしてみると、/etc/rc.d/init.d/hudson が無くなって (hudson.rpmsaveに変更)、 /etc/rc.d/init.d/jenkins に変わっていました。

で、調子にのって再起動。
hudsonのサービスはなくなっちゃってるので、hudsonの停止はエラー。でも、jenkinsは正常に起動しました。

[root@hudson-slave tmp]# /etc/rc.d/init.d/jenkins restart
Shutting down Jenkins [失敗]
Starting Jenkins
[ OK ]

プロセスの実行ユーザも、Jenkinsさんになっています。

# id jenkins
uid=102(jenkins) gid=106(jenkins) 所属グループ=106(jenkins)
context=root:system_r:unconfined_t:SystemLow-SystemHigh

Hudsonの場合は HUDSON_HOMEを/home/hudson にしていましたが、RPMのデフォルトは/var/lib/xxxx なので、JENKINS_HOMEも /var/lib/jenkinsになっています。

起動を確認すると、JENKINS_HOME が変わっているため、当然ジョブは何も無く、アカウント情報もまっさらな状態。

過去の資産を引き継がないといけないので、さてどうしよう?

2. 過去の資産をひきつぐ作業

大した仕事はしてない Hudson 改め Jenkinsさんですが、上司のよろずジョブも管理するというミッションを負っているため、そのままだと上司からクレームが来ます(汗)。

とにかく、従来使っていた、/home/hudson を引き継ぐところから始めました。 (このあたりは自己責任でお願いします…)

    • まずはいったんJenkins停止。(/etc/rc.d/init.d/jenkins stop)
      こわいので /var/lib/jenkins をmvしてバックアップしておく。
    • /var/lib/jenkins の中身を、/home/hudson で入れかえ。
    • chown -R jenkins:jenkins /var/lib/jenkins でOwner調整。
    • jenkins再起動。

さっそくアクセスすると、マスタ/スレーブの設定も引き継がれているようです。ジョブの一覧もちゃんと表示されました。

ちょうど、Jenkinsのコミッタの曽我部さんが、Email Extension Pluginの新しいバージョンをリリースしたと呟かれていたのを発見したので、同プラグインを入れ替えてみようとJenkinsの管理画面を参照したところ、下記のメッセージが。

jenkins-ci


さすがに『無視』もどうかと思ったので、『管理』のボタンを押すと、下記のような画面が表示されました。

jenkins-ci-2


旧データは無かったのですが、読めないデータとしていくつかリストが上がっていました。
ただし、あまり重要なジョブではないので、ここはあっさり『読めないデータを無視』ボタンを押すことに。

すると....。

Status Code: 500

Exception:
Stacktrace:
java.lang.NullPointerException
  at hudson.model.AbstractItem.getRootDir(AbstractItem.java:116)
  at hudson.model.Items.getConfigFile(Items.java:124)

IEだけかと思ったのですが、Firefoxでも同様の現象になってしまいました。
ちょっとここは良くわからなかったので、いったんJenkinsの管理に戻り、『無視』のボタンを押したところ、エラーや警告メッセージが出なくなりました。

あとでJenkinsのJIRA (BTS)の報告をチェックしてみようと思います。#JIRAっとこう、という表現になるのかな。

3. スレーブとの調整

さて、よろずJenkins には、Windowsスレーブと、CentOSのスレーブがいます。
接続の確認をしたところ、下記のようなパターンになりました。

    1. DCOM経由のWindows Slaveの起動 -> スレーブのAdministratorアカウント&パスワードを指定するため、問題無し。
    2. SSHによる起動 -> 公開鍵を利用する場合は、鍵の場所をカスタマイズしていたり、OwnerがJenkinsになっていないとNG.

2に関しては、マスターのJENKINS_HOME以下を、chown -R jenkins:jenkins して、Ownerを丸ごと変えたので、で問題なくなりました。
ただし、スレーブの接続先のアカウントは、勝手にJenkinsに変わるわけではありません

そのままでも問題無さそうですが、とりあえず変更したほうが気持ちがいいかな、と思って、スレーブの設定を、下記の通りにしてみました。

  • RemoteFSの変更: /tmp/huson -> /tmp/jenkins にしました。
  • スレーブ上の実行アカウントを hudson -> jenkinsに変更:
    ユーザ追加ではなく、/etc/passwd と /etc/group と、HOMEの変更を実施

/etc... の編集は、あまりお勧めできません。(というか、何やってんだ、コラ!というご指摘があればぜひ頂戴したいところです…)ご利用は自己責任で(^^;

が、とりあえず、これでうまくいっているようです。おかげ様で、久しぶりにプラグインの更新もできました。

もう少しノウハウをためて、メインで利用しているHudsonも、Jenkins化を検討していこうと思います。

0 件のコメント:

コメントを投稿