Jenkins でGitHubと連携して.NETアプリケーションをビルドするときにパッケージを復元する
概要
言いたいことは全部タイトルで言った!
つーことで、GitHubから.NETのアプリケーションをCloneして、ビルドしようとしたらNuGetのパッケージが見つからないので復元するとこまでやってみました。
環境
- Windos 10
- Jenkins 2.46.3
- Visual Studio Community 2017
- NuGet v4.1.0
Jobの設定
ソースコード管理
Gitを選択して、リポジトリURLに適当なリポジトリを入力します。PublicリポジトリをCloneするだけなので認証情報はなし。ブランチはmasterで。
GitHubのリポジトリは仕事で久しぶりにVB.NETを書くことになったので練習がてらに作ったどうでもいいやつです。[Clone or download]のとこでコピー。
実行結果
ワークスペースにソースコードがCloneされて、足りないパッケージも復元されました!
ビルドとユニットテストも通って青玉でました。ここにたどり着くまでにTry and Errorで19回もビルド実行しているのがバレバレ( ^Д^)σ
sh-yoshida.hatenablog.com
sh-yoshida.hatenablog.com
sh-yoshida.hatenablog.com
Jenkins でMSBuildと単体テストをジョブ実行する
概要
「MSBuildでコマンドラインからビルドする」、「VSTest.Consoleでコマンドラインからテストを実行する」とやってきたので、今回はJenkinsでビルド・テスト実行を行ってみたいと思います。
sh-yoshida.hatenablog.com
sh-yoshida.hatenablog.com
環境
- Windos 10
- Jenkins 2.46.3
- Visual Studio Community 2017
Jenkins
JenkinsとはJavaで書かれたオープンソース継続的インテグレーションツールである。
https://ja.wikipedia.org/wiki/Jenkins
Jenkinsのインストールは省略します。ダウンロードしてウィザードに従い進めていけばokです。私の環境はC:\Jenkins
にインストールしました。
jenkins.io
Jobの作成
それでは、[新規ジョブ作成]よりJobを作成していきます。ジョブ名は適当に「MyJob」で。[フリースタイル・プロジェクトのビルド]を選択しました。
[ビルド手順の追加]で[Windowsバッチコマンドの実行]を選択します。
Windowsバッチコマンドの実行
これでコマンド入力ができるので、前にやったMSBuildとVSTest.Consoleのコマンドをそれぞれ登録して保存、ビルド実行で出来ました!ハイ終わり!つーのもあれなので、プラグインを使ってみます。
Plugin
[Jenkinsの管理]-[プラグインの管理]から以下のプラグインをインストールしました。インストールができたら、それぞれ設定していきましょう。
- MSTest plugin
- VSTest Runner plugin
Pluginの設定
[Jenkinsの管理]-[Global Tool Configuration]で出来ます。初見でネットで調べてたらシステムの設定でできるって書いてあったけど無くてはまりました。UIが変わったタイミングだったのかな。
MSBuildは名前とexeのパスを登録しておきました。パスはexeの指定なし。
c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
VSTestも名前とパスですが、こちらはexeまで指定。なんか警告でてるけど。。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
これでPluginの準備ができたので、ジョブの設定に戻りましょう。
Jobの実行結果
[ビルド実行]ボタンを押下して実行した結果、うまく行きました♪
workspaceにビルドログとテスト結果も出力されてます。
VSTest.Console でコマンドラインからテストを実行する
概要
前回はMSBuildでコマンドラインからビルドしてみました。ということで今回は単体テストをコマンドラインから実行してみます。
環境
- Windos 10
- Visual Studio Community 2017
VSTest.Console
Visual Studioで書いた単体テストのコードをコマンドラインから実行するにはVSTest.Console.exeを使います。テストフレームワークの名前はMSTestだけどMSTest.exeじゃないってのはちと紛らわしいですね。
VSTest.Console.exe を使用して、単体テストまたはコード化された UI テストをコマンドラインから実行します。 これは Visual Studio 2012 以降のバージョンに関してパフォーマンスで最適化されており、MSTest.exe の代わりに使用されます。
https://msdn.microsoft.com/ja-jp/library/jj155800.aspx
Visual Studio Community 2017をデフォルトでインストールした場合のVSTest.Console.exeの場所は以下にありました。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
構文
Vstest.console.exe [TestFileNames] [Options]
パスを通すか、フルパスでVSTest.Consoleを実行します。引数にはテスト対象のdll。長くなるので以降はパスは省略します。
> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "C:\src\workspace\ClassLibrary1\ClassLibrary1Tests\bin\Debug\ClassLibrary1Tests.dll"
詳細なオプションは以下。
VSTest.Console.exe のコマンド ライン オプション
x64ビルドしたdllをテスト
64bitでビルドした場合、例えば"C:\src\workspace\ClassLibrary1\ClassLibrary1Tests\bin\x64\Debug"のようにテストプロジェクトのx64フォルダ以下にテストdllが出力されるので、こいつを引数に渡します。
> MSBuild ClassLibrary1.sln /t:clean;rebuild /p:configuration=Debug;platform=x64 > vstest.console ClassLibrary1Tests.dll /platform:x64 /framework:framework45 /inIsolation
複数のプロジェクトをテスト
それぞれのテスト対象dllのパスをスペースで区切って渡します。
> vstest.console ClassLibrary1Tests.dll ClassLibrary2Tests.dll
指定したテストメソッドのテスト
複数テストメソッドを指定する場合はカンマで区切って指定します。
> vstest.console ClassLibrary1Tests.dll /Tests:TestMethod1,TestMethod2
テスト結果ファイル(TRX)を出力
TestResultsフォルダに拡張子trxファイルが出力されます。このファイルをダブルクリックで開くとVisual Studioのテスト結果ウィンドウで見ることができます。
> vstest.console ClassLibrary1Tests.dll /Logger:trx
コードカバレッジを取得
Communityエディションでは残念ながら「警告: 診断データ アダプター ('コード カバレッジ') のメッセージ: CodeCoverage.exe が見つかりません。。」と表示され利用できません。
> vstest.console ClassLibrary1Tests.dll /EnableCodeCoverage
テスト実行
64bitでビルドして出来上がった二つのテストプロジェクトをテストして結果を出力してみました。
出力されたテスト結果ファイルをダブルクリック。
Visual Studioが起動して、テスト結果ウィンドウに表示されました。
コマンドラインでのビルドとテスト実行の雰囲気がなんとなくわかったところで次回はJenkinsと連携してみます!