1.21 jigowatts

Great Scott!

Jenkins でGitHubと連携して.NETアプリケーションをビルドするときにパッケージを復元する

概要

言いたいことは全部タイトルで言った!

つーことで、GitHubから.NETのアプリケーションをCloneして、ビルドしようとしたらNuGetのパッケージが見つからないので復元するとこまでやってみました。

f:id:sh_yoshida:20170608234545p:plain

環境
  • Windos 10
  • Jenkins 2.46.3
  • Visual Studio Community 2017
  • NuGet v4.1.0

Jobの設定

ソースコード管理

Gitを選択して、リポジトリURLに適当なリポジトリを入力します。PublicリポジトリをCloneするだけなので認証情報はなし。ブランチはmasterで。

f:id:sh_yoshida:20170608234540p:plain

GitHubリポジトリは仕事で久しぶりにVB.NETを書くことになったので練習がてらに作ったどうでもいいやつです。[Clone or download]のとこでコピー。

f:id:sh_yoshida:20170608234559p:plain

ビルド環境

ワークスペースにCloneされるので[ビルド開始前にワークスペースを削除する]にチェックを入れてみました。Timestamperプラグインもいつの間にか入っていたので、[コンソール出力にタイムスタンプを追加する]にチェック。

f:id:sh_yoshida:20170608234549p:plain

ビルド

パッケージを使っている場合復元してあげる必要があるので、別途NuGet CLIをダウンロードしてc:\toolsに配置してあります。

ダウンロードは以下から。
NuGet Distributions

nuget.exeのv4.1.0をダウンロードしました。

f:id:sh_yoshida:20170609000832p:plain

Windowsバッチコマンドの実行にて、コマンド実行。カレントはワークスペースになっているので、Cloneしたソースコードを対象にrestoreできるってわけですね。

c:\tools\nuget.4.1.exe restore

f:id:sh_yoshida:20170608234550p:plain

あとは前回と同じなので省略します。

f:id:sh_yoshida:20170608234554p:plain

実行結果

ワークスペースソースコードがCloneされて、足りないパッケージも復元されました!

f:id:sh_yoshida:20170608234556p:plain

ビルドとユニットテストも通って青玉でました。ここにたどり着くまでにTry and Errorで19回もビルド実行しているのがバレバレ( ^Д^)σ

f:id:sh_yoshida:20170609002403p:plain




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

f:id:sh_yoshida:20170602013815p:plain

環境

Jenkins

JenkinsとはJavaで書かれたオープンソース継続的インテグレーションツールである。

https://ja.wikipedia.org/wiki/Jenkins

Jenkinsのインストールは省略します。ダウンロードしてウィザードに従い進めていけばokです。私の環境はC:\Jenkinsにインストールしました。
jenkins.io

Jobの作成

それでは、[新規ジョブ作成]よりJobを作成していきます。ジョブ名は適当に「MyJob」で。[フリースタイル・プロジェクトのビルド]を選択しました。

f:id:sh_yoshida:20170602003033p:plain

[ビルド手順の追加]で[Windowsバッチコマンドの実行]を選択します。

Windowsバッチコマンドの実行

これでコマンド入力ができるので、前にやったMSBuildとVSTest.Consoleのコマンドをそれぞれ登録して保存、ビルド実行で出来ました!ハイ終わり!つーのもあれなので、プラグインを使ってみます。

f:id:sh_yoshida:20170601234427p:plain

Plugin

[Jenkinsの管理]-[プラグインの管理]から以下のプラグインをインストールしました。インストールができたら、それぞれ設定していきましょう。

  • MSTest plugin
  • VSTest Runner plugin

Pluginの設定

[Jenkinsの管理]-[Global Tool Configuration]で出来ます。初見でネットで調べてたらシステムの設定でできるって書いてあったけど無くてはまりました。UIが変わったタイミングだったのかな。

f:id:sh_yoshida:20170601234458p:plain

MSBuildは名前とexeのパスを登録しておきました。パスはexeの指定なし。

c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

f:id:sh_yoshida:20170601234539p:plain

VSTestも名前とパスですが、こちらはexeまで指定。なんか警告でてるけど。。

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe

f:id:sh_yoshida:20170601235028p:plain

これでPluginの準備ができたので、ジョブの設定に戻りましょう。

MSBuild

さきほどのコマンド実行の設定は削除して、[ビルド手順の追加]-[MSBuildの実行]。MSBuildバージョンは先ほど設定したPluginの名前を選択。MSBuildビルドファイルには対象のソリューション、コマンドライン引数には各種スイッチを入力します。

f:id:sh_yoshida:20170601234945p:plain

VSTest Runner

続きまして、同様に[ビルド手順の追加]-[VSTest実行]を追加します。VsTestバージョンにPluginで設定した名前、Test Filesにテスト対象のDLLファイルのフルパスを入力します。
f:id:sh_yoshida:20170601234647p:plain

さらに、[高度な設定]ボタンを押下し、プラットフォームの種類、フレームワークのバージョンなどを指定して保存します。

f:id:sh_yoshida:20170601234806p:plain

これでプラグインを使用するビルドの設定ができました!

Jobの実行結果

[ビルド実行]ボタンを押下して実行した結果、うまく行きました♪

f:id:sh_yoshida:20170602013248p:plain

workspaceにビルドログとテスト結果も出力されてます。

f:id:sh_yoshida:20170602013326p:plain

sh-yoshida.hatenablog.com
sh-yoshida.hatenablog.com

VSTest.Console でコマンドラインからテストを実行する

概要

前回MSBuildコマンドラインからビルドしてみました。ということで今回は単体テストコマンドラインから実行してみます。

sh-yoshida.hatenablog.com

f:id:sh_yoshida:20170528235357p:plain

環境

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でビルドして出来上がった二つのテストプロジェクトをテストして結果を出力してみました。

f:id:sh_yoshida:20170528235357p:plain

出力されたテスト結果ファイルをダブルクリック。

f:id:sh_yoshida:20170528235435p:plain

Visual Studioが起動して、テスト結果ウィンドウに表示されました。

f:id:sh_yoshida:20170529000736p:plain

コマンドラインでのビルドとテスト実行の雰囲気がなんとなくわかったところで次回はJenkinsと連携してみます!