Windows を Jenkins の Slave にして Git管理してる Rspec のテストを実行するためのセットアップ手順

# やりたいこと
* Windows マシンを Jenins の Slave にして、Bitbucket から最新のテストコード(Rspec) を取得して実行する

# 前提
* Jenkins masterはセットアップ済 (なのでjenkins自体のセットアップ手順は省略)
* Windows の Jenkins Slave はサービスとして実行する(実行ユーザは Local System)

# 環境
* Jenkins (master)
 * ubuntu 12.04 LTS
* Jenkins (slave)
 * Windows7 (ubuntu内にたてたVM)
* Gitサーバ
 * Bitbucket
* Ruby
 * Ruby 2.0.0-p481
* JRE
 * Version 7 Update 65

# Jenkinsの設定
## Windowsのコマンドプロンプトのパスを指定 (※1)
1. ブラウザで `jenkinsの管理 ＞ システムの設定` を開く
2. `シェル実行ファイル` に以下を追加
 * `C:\WINDOWS\system32\cmd.exe`

## ノードの追加
1. ブラウザで `Jenkinsの管理 ＞ ノードの管理 ＞ 新規ノード作成` にアクセスする
2. 以下のように設定する
 * リモートFSルート：`C:\jenkins`
 * 起動方法：`JNLP経由でスレーブを起動`
 * その他：(プロジェクトに適した内容)

## JNLP用のポートを解放 (※ここのみ、後日CentOS6.5でJenkins環境構築した際に必要になった工程)
1. ブラウザで `Jenkinsの管理 ＞ グローバルセキュリティの設定 にアクセスする
2. 以下のように設定する
 *  JNLPスレーブ用TCPポート番号：固定 (9000)
3. Linux で `/etc/sysconfig/iptables` に 以下を追記する
 * `-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT`
4. 以下コマンドを実行する
 * `service iptables restart`

# Windows(slave)のセットアップ
## Ruby 実行環境を用意
### Ruby インストール (※2)
1. http://rubyinstaller.org/ からインストーラをDLして実行する
2. システム環境変数PATHに以下を追加する
 * `Path=(Ruby.exeが存在するパス)`

### bundler インストール (※3)
1. 以下コマンドを実行する
 * `gem install bundler`

## Jenkins 用ディレクトリを作成
1. Jenkinsのノード設定で `リモートFSルート` に指定したディレクトリを作成する (今回は `C:\jenkins` を作成)

## Java実行環境を用意
### JREインストール
1. https://java.com/ja/download/ から DL してインストール

### JVM実行時の文字コードを UTF-8 にする (※4)
1. システム環境変数に以下を追加する
 * `JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8`

## Bitbucket 接続環境を用意
### Git for Windows インストール
1. http://msysgit.github.io/ から DL してインストール

### SSH鍵を作成 (※5)
1. SSH鍵保存先として以下ディレクトリを作成
 * `C:\SSHKeys`
2. システム環境変数に以下を追加
 * `HOME=C:\SSHKeys`
3. Git Bash で以下コマンドを実行する (パスフレーズは何も入力せずEnter押下する)
 * `ssh-keygen`

### Bitbucket に SSH でアクセスできるようにする
1. ブラウザを起動して Bitbucket のリポジトリページにアクセスし、`設定 ＞ デプロイ鍵` を開く
2. `鍵を追加` ボタン押下で追加ダイアログを開き、以下ファイルの内容をペーストする
 * `C:\SSHKeys\.ssh\id_rsa.pub`
3. Git Bash で以下コマンドを実行し、yes と答える (これにより、Bitbucket が `known_hosts` に追加される)
 * `ssh git@bitbucket.org`

## Jenkinsサービス のインストール
### Slave用Jenkinsサービス のインストール
1. ブラウザで `Jenkins の管理 ＞ ノードの管理 ＞ (Slave ノードの詳細画面)` を開く(以下のようなURL)
 * `http://[jenkinsホスト]/computer/[自分のノード名]/`
2. `Launch` ボタン押下する
3. `slave-agent.julp` がDLされるので、実行する
4. 下記ウィンドウが開くので、`File ＞ install as a service` を実行する
![installer.png](https://qiita-image-store.s3.amazonaws.com/0/45214/40841816-58a7-be39-a66d-9d06dd0df9aa.png)

# 注釈
* (※1)
 * これを設定しないと Jenkinsジョブ内のビルド手順で `Windowsバッチコマンド` を実行できない
* (※2)
 * Rubyインストーラのオプションで追加される環境変数は、システム環境変数ではなくユーザ環境変数なので注意！
 (Jenkins Slave サービスの実行ユーザは Local System なので、セットアップ中に Rubyインストーラを実行したユーザの ユーザ環境変数は参照しない)
* (※3)
 * 実際のテスト実行に必要な gem はプロジェクト毎に別途 `bundle install --path vendor/bundler` でインストールするので、ここでは Bundler のみインストールする
* (※4)
 * 文字コードを UTF-8 に変更しないと、Jenkins のビルド結果閲覧時に Console Output と Gitコミットログの日本語が文字化けする
* (※5)
 * 当初、SSH鍵を PuTTy日本語版に付属していた puttygen.exe で作成したが、それだと Bitbucket にアクセスできなかった (エラー内容：`Permission denied (publickey)`)。
 Git Bash でSSH鍵を作成し直したところ、Butbucket にアクセスできるようになった。
 理由はわからない。

# 参考サイト
* SSH問題のトラブルシューティング
 * https://confluence.atlassian.co.jp/pages/viewpage.action?pageId=34439419)
* Step by step guide to set up master and slave machines - 日本語 - Jenkins Wiki
  * https://wiki.jenkins-ci.org/display/JA/Step+by+step+guide+to+set+up+master+and+slave+machines