SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows に Jenkins をインストールして Windows スレーブを追加

leave a comment

最近、触ることがあったので忘れないうちに投稿を書いておきたいと思います。

Linux 苦手なので Windows 環境で構築しています。

■Jenkins のインストール


Jenkins の最新版については、http://jenkins-ci.org/ からダウンロードすることができます。
特定のバージョンをダウンロードしたい場合は、http://mirrors.jenkins-ci.org/ から入手できるかと。

今回は、1.616 を使用しています。

Windows 版の場合は、msi で提供が行われていますので、インストーラーを起動すれば、Jenkins がインストールされ、「Jenkins」サービスとして登録され起動します。

デフォルトの状態は

  • TCP 8080 で起動
  • すべてのユーザーがジョブを実行できる

状態となっていますので、これらについてはセキュリティの要件に応じて設定をする必要が出てきます。
# ポートについては「C:\Program Files (x86)\Jenkins\jenkins.xml」と Jenkins の管理のシステム設定から変更できます。

 

■Windows スレーブの追加


Jenkins は Jenkins のサーバーをインストールした環境以外でジョブを実行することができます。
これにより、役割や作業に応じて使用するサーバーを変更することができます。

今回は Windows 版の Jenkins をインストールしていますので、「Windows Slaves Plugin」がインストールされており、Windows をスレーブ環境として追加することが可能ですが、Linux 版等ではこのプラグインが入っていない可能性がありますので、Windows をスレーブとして追加する場合はプラグインの状態は確認したほうがよさそうですね。
Windows Slaves Plugin

Windows スレーブを追加する際の方法ですが、

  • JNLP経由でスレーブを起動
  • WindowsサービスとしてこのWindowsスレーブを制御

の 2 種類があり、情報を見ている限りは「JNLP経由でスレーブを起動」で Windows スレーブを追加する方がメジャーなのではと思います。

 

■JNLP 経由でスレーブを起動

JNLP 経由で接続をする場合には Step by step guide to set up master and slave machines の情報が参考になります。

Jenkins サーバー側としては

  1. Jenkins のダッシュボードへのアクセスを許可
  2. JNLP スレーブ用 TCP ポート番号の設定
  3. Windows スレーブとしてノードを追加
  4. システムの設定から「Jenkins URL」を変更する

が必要となってきます。

Windows スレーブから Jenkins のダッシュボードにアクセスする必要がありますので、F/W の要件がある場合には事前に許可をしておく必要があります。

また、JNLP スレーブ用 TCP ポート番号ですが、デフォルトの設定では「ランダム」となっています。
特定のポートに固定したい場合は、「グローバルセキュリティの設定」から TCP ポート番号を固定化します。
image

Windows 版の Jenkins の場合は、インストール時に「C:\Program Files (x86)\Jenkins\jre\bin\java.exe」から、オープンされたポートについては自動的に F/W を許可する設定となっているため、上記の設定は不要かと思いますが、ネットワーク要件としてこのようなものがあるというのは覚えておいた方がよさそうですね。

JNLP でスレーブを追加する場合、システムの設定から「Jenkins URL」を「http://localhost」から変更しておく必要があります。

このURL はエージェントをダウンロードする際にも使用されており、Windows スレーブからダッシュボードにアクセスし、エージェントをダウンロードしようとした場合に、localhost からダウンロードしてしまおうとして、「com.sun.deploy.net.FailedDownloadException: リソースhttp://localhost:8080/jnlpJars/remoting.jarをロードできません」というような Exception が発生してしまいます。
Windows slaves fail to start via JNLP

この場合は、追加する Windows スレーブで

  1. JRE のインストール
  2. .NET Framework 3.5 のインストール
  3. Jenkins のダッシュボードにアクセス
  4. Jenkins のエージェントを実行
  5. サービスとして登録

という手順になるかと思います。

JNLP を実行するために JRE が必要になりますので、http://www.oracle.com/technetwork/java/javase/archive-139210.html からダウンロードをし、インストールしておきます。

今回は、Java SE Runtime Environment 7u76 x64 をインストールしています。

 

Windows スレーブとして登録する環境で、Jenkins のダッシュボードにアクセスし、自身のスレーブとして登録した情報から「Launch」をクリックすることで、エージェントを起動することができます。

image

エージェントを起動した状態では、サービスとして登録がされておらず、Jenkins サーバーやスレーブを再起動した際に再接続が必要となります。
そこでエージェントを起動したら、「File」→「Install as a service」を実行して、サービスとして登録をしておきます。
image

Jenkins をサービスとして登録する場合には、「.NET Framework 3.5」(厳密には 2.0 だと思いますが) が必要となりますので、事前にインストールをしておきます。

JNLP を使用した場合は、

  • Windows スレーブ→Jenkins サーバー

への接続となるため、Jenkins サーバー側で

  • エージェントを実行するためのダッシュボードのポート
  • JNLP で接続するための JNLP スレーブ用のポート

が許可されていれば接続ができますので、必要となるポートはわかりやすいですね。

 

■WindowsサービスとしてこのWindows スレーブを制御

こちらは DCOM を使用する方法となりますので、スレーブ側でいくつかの設定が必要となります。

詳細については以下を参照していただければと。
Windows slaves fail to start via DCOM
Windows slaves fail to start via DCOM (日本語ドキュメント)

Windows スレーブでは、

  1. JRE のインストール
  2. .NET Framework 3.5 のインストール

は JNLP 同様に必要となりますので事前に実行をしておきます。

そのほかの設定として、

  1. Jenkins サーバーからの接続用に「Administrators」グループのユーザーが必要
  2. Administrator 以外で接続をする場合は、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System」の「LocalAccountTokenFilterPolicy」(REG_DWORD)を「1」に設定
    # Administrator 以外での管理共有への接続
  3. 「HKEY_CLASSES_ROOT\CLSID\76A64158-CB41-11D1-8B02-00600806D9B6}」に、Jenkins からの接続用ユーザーの「Full Controlを付与
  4. TCP 135 / 139 / 445 の受信の許可
  5. UDP 137 / 138 の受信の許可
  6. C:\WINDOWS\system32\dllhost.exe の受信の許可
  7. C:\WINDOWS\system32\javaw.exe の受信の許可
    # PATH の設定によっては、「C:\Program Files\Java\jre7\bin\javaw.exe」が実行されることがあるため、どちらで起動するかは確認する

を実施する必要があります。

スレーブ起動時の Java の存在確認でエラーとなる場合には、Windows スレーブのノード設定で、「Javaのパス」を以下のように指定するとよいかと思います。
この場合、Windows F/W の Javaw.exe のパスも「C:\Program Files\Java\jre7\bin\javaw.exe」に変える必要がありますが。

image

接続時のメッセージが以下のように表示されていれば、DCOM 経由でのスレーブの起動は終了です。

image

 

■プラグインの追加

Windows スレーブのプラグインがインストールされていれば、「Windowsバッチコマンドの実行」は実行することができるのですが、PowerShell を実行できるように、PowerShell Plugin を入れておきたいと思います。
# zip でダウンロードされた場合は、拡張子を hpi に変更しておきます。

これで、ビルド手順として「Windows PowerShell」が使用できるようになります。

image

今回は一行のスクリプトで実行していますが以下のように実行することができます。

image

image

複数のジョブで一つの処理を実行する場合には、Build Pipeline Plugin が入っているとジョブの可視化ができてよいかと。
# jQuery Plugin / Parameterized Trigger Plugin と依存関係があるため、これらのプラグインを事前にインストールしておく必要があります。

このプラグインを使用すると、「Build Pipeline View」が追加できるようになり、以下のように複数のビルドがどのように実行されて、実行結果がどうだったかを 1 画面で確認することができます。

image

リポジトリの変更をフック / リポジトリからソース取得 / 結果の通知等が入っていないので CI っぽくないところまでしか書けていませんがひとまず導入部分を。

Written by masayuki.ozawa

6月 8th, 2015 at 11:36 am

Posted in Jenkins

Tagged with

Leave a Reply

*