Jenkins使ってみた
~Windows編~
@tsubakimoto_s
自己紹介
• 松村 優大 (Yuta Matsumura)
• 医療系システムの開発・導入をしています。主に C#。
• 切磋琢磨できる人たちと仲良くなりたい。
• MLB大好きです。Vagrantも好き。
• Twitter : @tsubakimoto_s
• 島根県出身です。
私と Jenkins
• 私はほとんど Jenkins のことを知りません。
• 社内の C# 開発プロジェクトに導入するために
Jenkins を勉強しています。
• この勉強会の内容も丸パクリ参考にします。
• チーム開発に役立つプラグイン教えて下さい ><
自動化したいこと
• ソリューションのビルド。
• リポジトリに変更があった際に、ソリューション全体が正しくビルド
できるかどうかの確認をします。
• プログラムの単体テスト。
• リポジトリに変更があった際に、単体テストを実施し、デグレが発生
していないことの確認をします。
自動化したいこと
• ソリューションのビルド。
• リポジトリに変更があった際に、ソリューション全体が正しくビルド
できるかどうかの確認をします。
• プログラムの単体テスト。
• リポジトリに変更があった際に、単体テストを実施し、デグレが発生
していないことの確認をします。
ビルドを手動で実行する
MSBuild プラグイン
• .NET プロジェクトの自動ビルドを行い、ビルド結果や
エラー情報が保存されます。
• MSBuild.exe を使います。
• https://wiki.jenkins-
ci.org/display/JENKINS/MSBuild+Plugin
MSBuild.exe って?
• ビルドエンジンです。
• .NET Framework のインストールに付随します。
• サーバに Visual Studio をインストールしなくてもビル
ドができます。
MSBuild プラグイン
MSBuild.exe
MSBuild プラグイン
自動化したいこと
• ソリューションのビルド。
• リポジトリに変更があった際に、ソリューション全体が正しくビルド
できるかどうかの確認をします。
• プログラムの単体テスト。
• リポジトリに変更があった際に、単体テストを実施し、デグレが発生
していないことの確認をします。
単体テストを手動で実行する
MSTestRunner プラグイン
• Visual Studio 標準の単体テスト (通称 MSTest) を自動実
行します。
• MSTest.exe を使います。
• https://wiki.jenkins-
ci.org/display/JENKINS/MSTestRunner+Plugin
MSTest.exe って?
• テストを実行するために使用されるコマンドライン
アプリケーションです。
• Visual Studio (Express以外) が必要になります。
• テスト結果をファイル出力 (XML) できます。
MSTestRunner プラグイン
単体テストを手動で実行する (NUnit 編)
NUnit って?
• .NET 向けのテスティングフレームワークです。
• MSTest が使えない Visual Studio で単体テストを行える。
• NuGet (パッケージマネージャ) 経由で、簡単にプロ
ジェクトに追加できる。
NUnit プラグイン
• NUnit を使った単体テストの件数や結果を保存、グラフ
化します。
• 自動テストではないため、ビルド成功時に単体テスト
を実行するよう、ソリューションまたは Jenkins に組み
込むことが必要です。
• http://wiki.jenkins-ci.org/display/JENKINS/NUnit+Plugin
NUnit プラグイン
• 成功件数と失敗件数の遷移が分かる。
NUnit プラグイン
• 失敗時のスタックトレースも分かる。
VsTestRunner プラグイン
• 発表前日になって見つけました。
• Visual Studio に付随する vstest.console.exe を使って単
体テストを行うようです。
• 単体テストに関する設定を GUI で選べるため、便利そ
う。
VsTestRunner プラグイン
感想
• 単体テスト自体は、Visual Studio 標準 (MSTest) で十分
な機能を有していると思います。
• Jenkins 上のテスト結果が分かりやすい NUnit も捨てが
たい。Visual Studio Express なら NUnit 一択です。
• VsTestRunner プラグインが気になって仕方がない。
5月から社内プロジェクトに試験導入しました
• Windows Server 2012 R2
• Apache
• Subversion
• Jenkins (MSBuild, MSTestRunner)
流れは?
Commit
.bat,.vbs
• MSBuild
• MSTestRunner
• フックスクリプト
作動
.bat と .vbs
SET CSCRIPT=%windir%¥system32¥cscript.exe
SET VBSCRIPT=C:¥path¥to¥post-commit.vbs
SET JENKINS=http://<JenkinsのURL>/job/<プロジェクト名>/build
"%CSCRIPT%" "%VBSCRIPT%" %JENKINS%
url=WScript.Arguments.Item(0)
Set http=CreateObject("Microsoft.XMLHTTP")
http.open "POST", url, False
http.setRequestHeader "Content-Type", "text/plain;charset=UTF-8"
http.send ""
post-commit.bat
post-commit.vbs
今回の検証環境
• Windows × Jenkins の環境は Vagrant で作りました。
• Windows Server 2012 評価版を利用。180日間使えます。
• Box の作り方はこちらを参考に。
• http://tech.nitoyon.com/ja/blog/2014/02/20/vagrant-win-
guest/
• vagrant-windows プラグイン必要。
Vagrant 1.6 の新機能
• vagrant-windows プラグインの機能が標準搭載。
• http://www.vagrantup.com/blog/vagrant-1-6.html
• vagrant rdp コマンドで仮想マシンへのリモートデスク
トップ接続が可能になりました。
• が、きちんと動いた試しがありません。Boxの作り方に
コツがいるのかなぁと。分かる方教えて下さい><
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "windows2012r2"
config.vm.guest = :windows
config.vm.network :forwarded_port, guest: 3389, host: 3389
config.vm.network :forwarded_port, guest: 5985, host: 5985
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "windows2012r2"
config.vm.guest = :windows
config.vm.network :forwarded_port, guest: 3389, host: 3389
config.vm.network :forwarded_port, guest: 5985, host: 5985
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
[vagrant-windows]プラグインを使うよう指定する。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "windows2012r2"
config.vm.guest = :windows
config.vm.network :forwarded_port, guest: 3389, host: 3389
config.vm.network :forwarded_port, guest: 5985, host: 5985
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
リモートデスクトップのためのポートフォワード設定。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "windows2012r2"
config.vm.guest = :windows
config.vm.network :forwarded_port, guest: 3389, host: 3389
config.vm.network :forwarded_port, guest: 5985, host: 5985
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
Windows リモート管理 (WinRM) のためのポートフォワード設定。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "windows2012r2"
config.vm.guest = :windows
config.vm.network :forwarded_port, guest: 3389, host: 3389
config.vm.network :forwarded_port, guest: 5985, host: 5985
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
Jenkins にアクセスするためのポートフォワード設定。
ありがとうございました。

Jenkins使ってみた~Windows編~