この程度のバグもお分かりにならないとは、旦那様はアホ

少し時間ができたので久しぶりにredmineとhudsonを更新して・・・え・・!?・・あれ!?・・・hudsonさんクビになってるし! えええ!
というわけで、jenkinsさんに頼むことにしましたので、少しメモ。

0.もくてき

jenkinsさんにバグを探してもらい見つかったら罵ってもらう
jenkinsを稼働させ、linuxスレーブ(jenkinsが動いてるサーバー)とwindowsスレーブを作り、
pythonはテスト+α、windowsでは.Netビルド+テスト+αを行います。

1.jenkinsを動かす

 今回は以下のURLでjenkinsを動かします。

http://host/jenkins

centosで動作してるホストで動かすので、yumのリポジトリを使います。
[bash]
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

yum install jenkins
[/bash]

編集:/etc/sysconfig/jenkins
# 最後の行なるARGSに追加
JENKINS_ARGS=”–prefix=/jenkins”

編集:/etc/httpd/conf.d/proxy_ajp.conf
LoadModuleが有効なことを確認

編集:/etc/httpd/conf/httpd.conf
# 追加したいところに。
[text]
ProxyRequests Off
ProxyPreserveHost On
<Location /jenkins>
ProxyPass ajp://localhost:8009/jenkins
ProxyPassReverse ajp://localhost:8009/jenkins
</Location>
[/text]

jenkinsのリスタートとapacheのリロード
[bash]
/etc/init.d/jenkins restart
/etc/init.d/httpd reload
[/bash]

参考:

2.windowsスレーブを追加する。

jenkinsの管理>ノードの管理から追加する。
起動方法を「windowsサービスとしてこのwindowsスレーブを制御」を選択して管理者権限のある(administrators)のユーザーを入力する。
最初は全然起動してくれなかったが、ひとつずつトラブルシューティングの内容を確認していったら動いた。

Windows slaves fail to start via DCOM – hudson – Hudson Wiki

動かないときに確認すべきポイント

  • ポートをあけること
  • 必要なサービスが動いていること
  • JDKがインストールされていること
  • 実行exeをファイアウォールの例外に追加すること

3.windowsスレーブを使って.netアプリをビルドする。

windowsスレーブには、.NetアプリケーションをGitリポジトリから取得し、MSBuildでビルドして、NUnitでテストして、PartCoverでカバレッジを測定して、テストとカバレッジをjenkinsで確認する、という流れを作ります(カバレッジについては未完成)。

GITプラグイン Jenkins GIT pluginを有効化
設定で、GITのパスを追加(linuxスレーブ向けとwindowsスレーブ向け)
パスを入力するとき、じゃなくて/を使う。

MSBuildプラグイン Jenkins MSBuild Pluginを有効化
パスを設定する。

プロジェクトを作る。

MSBuildでソリューションをビルド
/p:Configuration=Release

nunitでテスト
“D:Program FilesNUnit 2.4.8binnunit-console.exe” pathtoHogehogeTest.dll /xml=nunit-result.xml

publish NUnit test result reportでテスト結果をhtml化。

・msbuildするとき、dllの検索パスの中にnunit.framework.dllがないと怒られる。
‘HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkAssemblyFolders’ にNUnitというキーを作って、フォルダのパスを値として設定する。
参考:AssemblyFoldersについての記述があった:Npgsql: ユーザマニュアル

・partcoverでカバレッジ

Part Cover 紹介 その3 – Part Cover console から テストコード(NUnit)のカバレッジを取得する – お だ のスペース

Hudson で PartCover を使ってみた – お だ のスペース

“D:Program FilesGubka BobPartCover .NET 2PartCover.exe” –target “D:Program FilesNUnit 2.4.8binnunit-console.exe” –target-args pathtoHogehogeTest.dll –include [namespace]* –output partcover-result.xml

xmlとxlstでhtml生成は以下のタスクを使う。
msbuildtasks.tigris.org

タスクをいれたら
Part Cover 紹介 その4 – ビルドに組み込む。MSBuild から Part Cover console を実行する – お だ のスペース

タスクを使ったプロジェクトファイルを作ってそれでビルドする。

参考:

4.pythonでビルド・テスト

pythonは、GITリポジトリから取得し、nose, unittest-xml-reporting, coverageを使ってテストとカバレッジ出力します。

まずは準備
pip install nose coverage unittest-xml-reporting

GITリポジトリの設定をして、

ビルドで「シェルの実行」を選択して、以下を実行させる。
PATH=/opt/python2.7/bin:$PATH
nosetests -v -w tests/ –with-xunit –with-coverage
coverage xml

(ここでnosetests -vってのを他のホームページなどでよく見たので、こうしてるけど、-vでもなしでもxmlの内容変わらないような気がするだけどどうだろ?)

ビルド後の処理でCoverturaカバレッジ・レポートの集計(coverage.xml)とJUnitテスト結果の集計(nosetests.xml)を設定する。

5.おまけ

Cacooのステンシルがありました。
JenkinsステンシルをCacoo Storeに公開しました – @ikikko のはてなダイアリー