Hudson と Jenkins を両方使ってみて分かった両者の違い

かねてより書いているとおり、当工房では Hudson と Jenkins をともに運用しているわけで、これまでに分かった両者の違いをまとめてみます。

  1. Jenkins の方がコミュニティに活気があり、プラグインも多い。
  2. Hudson は同梱されているプラグインが少なく、最初の起動時にダウンロードするようになっている。
  3. Hudson では Jenkins にもある Maven プロジェクトがレガシー扱いになっていて、自由形式プロジェクトで扱えるように変更されている。
  4. Hudson ではマスター ノードの構成が Jenkins のようには独立していない。
  5. Hudson にはカスケーディング ジョブがあり、ジョブの継承やテンプレート的な利用が標準機能だけで可能になっている。
  6. Jenkins は ${user.home}/.jenkins${user.home}/.hudson がどちらもあると後者を優先して利用する。システム プロパティで JENKINS_HOME を設定しない限り、同一アカウントでは共存できない。

最後のは違いではないですが、どちらも使ってみたい方には参考になるのではないかと思います。

 

Hudson と Jenkins の共存

Jenkins を稼働させているアプリケーション サーバーに比較のため Hudson を追加インストールしたら、JenkinsHudson${user.home}/.hudson を見に行っておかしくなっていた模様です。普通は自分のディレクトリ (${user.home}/.jenkins) が既にあれば、そっちを先に見に行くものだと思うのですが、どこか間違っている気がします。

結局、アプリケーション サーバー側で JENKINS_HOME を正しいディレクトリに設定して分離には成功しましたが、この挙動は腑に落ちません。

Jenkins 用 RAD Studio Plugin

過去記事を調べてみたらブログには書いてなかったことに気づいたので、改めて RAD Studio Plugin を紹介しておきます。

このプラグインの機能は、RAD Studio (Delphi もしくは C++Builder) のプロジェクトを簡単にビルドできるようにするだけです。必要な環境変数の設定は RAD Studio コマンド プロンプト用のバッチファイルから読み取るので、RAD Studio 各バージョンのインストール先をそれぞれ設定しておけば、ビルドに利用するバージョンを選択して、プロジェクトファイルと MSBuild のコマンド スイッチを指定するだけで、ビルドすることができます。もうバッチ ファイルで細工する必要ありません。

もし役に立つと感じたら、フィードバックをいただけるとありがたいです。

Jenkins 用 Tool Labels Plugin

先日の RAD Studio Plugin に続き、調子に乗って Tool Labels Plugin を公開いたしました。

このプラグインの機能は、インストール済みツールによりノードに動的にラベルを追加するというものです。ツールのインストール有無によりビルドを実行するノードを限定するのが目的で製作しました。

実を言えば、RAD Studio Plugin の新機能として企画していたのですが、他のツールにも使えることに気づいて、急遽 独立したプラグインに仕立てたものなのですけどね。例えば、RAD Studio XE7 に bds15.0 というラベルを付けておくと、インストール済みノードに動的にこのラベルが付くので、ビルドを実行するノードを限定するのに使えるようになる訳です。

便利だと感じたらフィードバックをいただけるとありがたいです。

Jenkins 復旧

GlassFish アップデートで障害発生から止まっていた Alfa.linuxfront.com の Jenkins がようやく復旧しました。

何が問題を起こしていたのかを簡潔に書けば、GlassFish 4.1 のクラスター インスタンスに配置していたために Jenkins初期化に失敗していたということでした。単一のスタンドアローン インスタンスに配置替えをしたことにより初期化に失敗することもなくなり、ひとまず平常運転に戻れそうです。

不思議なのは、前バージョンの GlassFish 4.0 ではクラスター インスタンスでも動いてたってことなんですよね。4.1 で動作が変わったのでしょうか。

Jenkins 解説書

オライリーから出版されている Jenkins の解説書です。Java 以外のネイティブ言語の自動ビルドがどの程度まで自動化できるのか調べたかったので購入したものですが、基本的に Java 中心でそれ以外はシェルでコマンドを書けばどんなことでもできるというぐらいしか書いてなかったので、本来の目的からすれば参考程度でした。Java がメインならこれだけでも十分役に立つと思います。

RAD Studio のパッケージ プロジェクトを Jenkins でビルドしてみた

RAD Studio のパッケージ プロジェクトを Jenkins を使ってバージョン別にバッチ ビルドするようにしてみたので記載する。

Jenkins スレーブ ノードの設定

RAD Studio を使ってビルドを実行するために、まず RAD Studio をインストールした PC を Jenkins のスレーブ ノードとして設定する。パッケージ プロジェクトを RAD Studio のバージョンごとにビルドを実行するために、ここで RAD Studio の各バージョンを識別するラベルを列挙しておく。

jenkins-slave-1

今回はビルド実行時に手動でスレーブを起動するので、起動方法を JNLP 経由とし、また可用性も必要時だけオンラインにする設定とする。(注: Windows のサービスとして登録しておけば常時オンラインにすることもできるのだが、RAD Studio のライセンス上「指名ユーザー」だけが使用しなければならないことになっているので、手動で起動することにした。)

さらに Jenkins プロジェクトでスレーブ ノードの環境を設定するために、環境変数 BDS と BDSCOMMONDIR のバージョンごとの値を設定しておく。(注: BDSINCLUDE は BDS の値から設定可能なので省略した。)

jenkins-slave-2

Jenkins マルチ構成プロジェクトの設定

パッケージ プロジェクトを RAD Studio のバージョンごとにビルドを実行するために、Jenkins でマルチ構成プロジェクトを設定する。マトリックスの設定でスレーブを軸に追加して、ビルドしたいラベルを選択しておく。

jenkins-job-1

さらに RAD Studio のバージョンごとに設定を切り替えるために、EnvInject プラグインを利用して必要な環境変数を設定する。

jenkins-job-2

ビルド実行には MSBuild プラグインを利用して、プロジェクト ファイルからビルドするように設定する。

jenkins-job-3

ビルドの実行

必要な設定が完了すれば、スレーブ エージェントを JNLP 経由で起動してマルチ構成プロジェクトのビルド実行を選択すれば、RAD Studio ごとにビルドが実行される。追加で成果物の保存を設定しておけば、ビルド後のバイナリー ファイルを簡単に取得することができる。

Jenkins をパスワード管理なしで使う方法

Jenkins をインターネットから安全にアクセス可能にするために、パスワード管理なしで使えるようにしたので、その方法を紹介する。

この種のサービスをインターネットからアクセス可能にするには、パスワードを保護するために SSL による暗号通信を用いることが多いと思われる。しかし SSL にはサーバー証明書が必要であり、正規に取得したものでない限りブラウザーにより警告表示が出るのが煩わしさを感じるところでもある。

そこで SSL を使わない方法ということで考えたのが、既存の安全な認証機能を利用するということである。これには OpenID プラグインが役立った。

まあ何のことはない。以前 Google Apps が無料だった頃に申し込んであったドメインを使って SSO を設定しただけである。実際に設定してみたらあっけなく機能してしまった。