SlideShare a Scribd company logo
1 of 34
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 にアクセスするためのポートフォワード設定。
ありがとうございました。

More Related Content

What's hot

「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 

What's hot (20)

Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
 
deep dive distributed tracing
deep dive distributed tracingdeep dive distributed tracing
deep dive distributed tracing
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
アジャイル開発とメトリクス
アジャイル開発とメトリクスアジャイル開発とメトリクス
アジャイル開発とメトリクス
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
ゲーム開発環境の自動化
ゲーム開発環境の自動化ゲーム開発環境の自動化
ゲーム開発環境の自動化
 

Similar to Jenkins使ってみた~Windows編~

継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
Takayuki Kondou
 
モダン開発環境
モダン開発環境モダン開発環境
モダン開発環境
Koji Agawa
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
Hiro Yoshioka
 
CIBC workshop by imagire
CIBC workshop by imagireCIBC workshop by imagire
CIBC workshop by imagire
Takashi Imagire
 
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 

Similar to Jenkins使ってみた~Windows編~ (20)

恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
Jenkins実践入門目次チラ見せしちゃいます
Jenkins実践入門目次チラ見せしちゃいますJenkins実践入門目次チラ見せしちゃいます
Jenkins実践入門目次チラ見せしちゃいます
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
Jenkinsstudy#4kokawa
Jenkinsstudy#4kokawaJenkinsstudy#4kokawa
Jenkinsstudy#4kokawa
 
モダン開発環境
モダン開発環境モダン開発環境
モダン開発環境
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
JenkinsとSeleniumの活用事例
JenkinsとSeleniumの活用事例JenkinsとSeleniumの活用事例
JenkinsとSeleniumの活用事例
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
 
邪道Jenkins
邪道Jenkins邪道Jenkins
邪道Jenkins
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
CIBC workshop by imagire
CIBC workshop by imagireCIBC workshop by imagire
CIBC workshop by imagire
 
CIのもたらす世界
CIのもたらす世界CIのもたらす世界
CIのもたらす世界
 
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 

More from Yuta Matsumura

More from Yuta Matsumura (20)

「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
 
チーム開発で徐々にコード品質をあげていく取り組み
チーム開発で徐々にコード品質をあげていく取り組みチーム開発で徐々にコード品質をあげていく取り組み
チーム開発で徐々にコード品質をあげていく取り組み
 
.NETのサポートポリシーのおさらい #csharptokyo
.NETのサポートポリシーのおさらい #csharptokyo.NETのサポートポリシーのおさらい #csharptokyo
.NETのサポートポリシーのおさらい #csharptokyo
 
App Modernization for .NET
App Modernization for .NETApp Modernization for .NET
App Modernization for .NET
 
分かったうえではじめるCI/CD
分かったうえではじめるCI/CD分かったうえではじめるCI/CD
分かったうえではじめるCI/CD
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
いつでもどこでも .NET
いつでもどこでも .NETいつでもどこでも .NET
いつでもどこでも .NET
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
 
Azure の ID 管理サービスに LINE ログインを組み込もう
Azure の ID 管理サービスに LINE ログインを組み込もうAzure の ID 管理サービスに LINE ログインを組み込もう
Azure の ID 管理サービスに LINE ログインを組み込もう
 
Blazor Server テンプレート解説
Blazor Server テンプレート解説Blazor Server テンプレート解説
Blazor Server テンプレート解説
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
 
忙しい人のための .NET Conf 2019 まとめ
忙しい人のための .NET Conf 2019 まとめ忙しい人のための .NET Conf 2019 まとめ
忙しい人のための .NET Conf 2019 まとめ
 
.NET Conf の歩き方
.NET Conf の歩き方.NET Conf の歩き方
.NET Conf の歩き方
 
PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 閉会式PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 閉会式
 
PHPカンファレンス福岡2019 開会式
PHPカンファレンス福岡2019 開会式PHPカンファレンス福岡2019 開会式
PHPカンファレンス福岡2019 開会式
 
これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏
 

Jenkins使ってみた~Windows編~