2016年8月21日日曜日

TeamCity上からSonarQube にテスト結果を含める手順 for OpenCover

概要

TeamCityのBuild Stepから、VSTestと、OpenCoverで、SonarQubeにテスト実施状況とカバレッジを表示させる手順。

前提

  • TeamCity上から、SonarQube の解析の実行までできる状態であること(こちらの投稿で、最低限の手順を記載済)
  • OpenCoverをダウンロード済であること(zipを任意の場所に解凍でOK)
  • 対象のBuild Configuration にて、Version Control Settingsの「Clean build」が有効になっていること(毎回溜まっていくテスト結果の処置に困るため)

手順

  1. 対象のBuild Step の編集画面を開く
  2. テスト実行を行うBuild Step を追加する。
テスト実行のBuild Step は、ビルドより後、SonarQube の解析終了コマンドより手前に配置する。
テスト実行のBuild Step は以下のような雰囲気:
  1. SonarQube の解析開始側のBuild Step に、以下コマンドライン引数を追加する
/d:sonar.cs.vstest.reportsPaths="TestResults\*.trx"
この時点で、SonarQube のDashBoard に、テスト結果が表示されるようになる。

  1. OpenCover のBuildStepを追加する。
実行コマンド:
<OpenCover解凍フォルダ>\OpenCover.Console.exe

コマンド引数:
-output:opencover.xml
-register:Path32
“-target:%teamcity.dotnet.vstest.14.0%" -targetargs:SimpleClassLibraryTest\bin\Release\SimpleClassLibraryTest.dll

※OpenCoverのBuildStep は、ビルドより後、SonarQube の解析終了コマンドより手前に配置する。
※-targetargs の中身は、テスト対象のDLL。対象の内容に応じて、書き換え
  1. SonarQube の解析開始側のBuild Step に、以下コマンドライン引数を追加する
/d:sonar.cs.opencover.reportsPaths="opencover.xml"
  1. ※”overcover.xml”は、OpenCoverの実行コマンドの”-output”に指定したファイル名
  2. 最終的なBuild Steps:

実行結果

SonarQube 側のプロジェクト毎のホーム画面、ダッシュボードで、カバレッジとテスト結果の確認が行えるようになる。
プロジェクトホーム画面より抜粋:
ダッシュボード画面より抜粋:
補足:
※TeamCity側で何もエラーが発生していないのに、コードカバレッジが上手く表示されていない場合には、該当のビルドのBuild Logを、TeamCity上で確認してください。Coverageを実行しているBuild Stepで、何らか起きているはず。
※上手くいかない場合は、コマンドライン引数の”-register:Path”部分を、”-register:User”か”-register:Path64”かに変更で、上手く行く…かもしれない

カバレッジが通っていないコードなども確認可能:
赤いバーが表示される:


参考ページ:


以上。

2016年8月19日金曜日

TeamCity のBuild で SonarQube のソース解析を実行する(MSBuild)

概要

SonarQubeの「SonarQube Scanner for MSBuild」を、TeamCityから起動できるようにするまでの手順。
とりあえずやってみたらとりあえず出来た! というレベル。もっと良い手段もある、と、思う。。

前提

  • TeamCity の BuildAgent に「SonarQube Scanner for MSBuild」がインストール済であること。
  • SonarQube サーバが起動済であること

手順

  1. Build Agent に実行ファイルの場所を追加する(省略可能*1)
以下ファイルをメモ帳なり、任意のエディタで開く
<Build Agentのインストールフォルダ>\conf\buildAgent.properties
※<Build Agentのインストールフォルダ>は、TeamCity上で、Agentの「Agent Parameters」タブの”agent.home.dir”に記載されている
  1. 開いたファイルに、以下内容を追加
system.msBuildSonarQubeRunnerPath=<SonarQube Scanner for MSBuild を配置した場所>
※”<>”の間の部分は、適宜読み替えてください。。c:\\sonarqube\\bin とか。”/”をエスケープするのをお忘れなく

  1. Build Step に 普通にビルドを実行するBuild Step を追加する
以下のような。

  1. ビルドを実行するBuild Stepの手前に、以下のBuild Stepを追加する
実行コマンドの内容:
%system.msBuildSonarQubeRunnerPath%\MSBuild.SonarQube.Runner.exe
パラメータの内容(*2):
begin /k:"%system.teamcity.projectName%" /n:"%teamcity.project.id%" /v:"%build.number%"

  1. 後続に、以下のBuild Stepを追加する
実行コマンドの内容:
%system.msBuildSonarQubeRunnerPath%\MSBuild.SonarQube.Runner.exe
パラメータの内容:
end

  1. 全体的には、以下のような Build Configuration になる:

補足

*1 Build Step内でパラメータを使って実行ファイルのパスを指定しているので、Build Agent にパラメータを追加している。不必要だと思うのであれば、省略して、Build Stepに直接ファイルパスを記載してください
*2 Scanner for MSBuild の引数として引き渡しているTeamCityのパラメータの意味合いは以下の通り
  • system.teamcity.projectName : 現在ビルドを実行中のプロジェクトの名前。
  • teamcity.project.id : プロジェクト作成時に指定したID
  • build.number : ビルド毎に更新される番号。何も設定していない場合は「ビルドを実行した回数」が設定されるはず(Build Configuration の General Settings にて設定可能)

実行結果の確認

実行すると、SonarQube 側のページで、以下のような雰囲気で確認が可能。
(2行目が、追加された解析結果)

SonarQube は、実行結果を勝手に蓄積していくので、後々の品質評価等にも、役立つ情報が得られる。デプロイのような作業が必要ないようなプロジェクトでも、チェックインする度にソース解析が実行される状態にしておくことは、非常に有益であると思う。

以上。

Sonar Scanner for MSBuild のセットアップ手順

概要

SonarQube にて、C#、VB.NET のソース解析をするための覚書。

前提条件

  • SonarQube がインストール済であること。
  • SonarQube サーバが起動中であること。

設定手順

Soner Scanner for MSBuild のダウンロード、解凍

ダウンロードURL:
上記ページの「ダウンロード」リンクから、zipファイルをダウンロードし、任意の場所に解凍する。
解凍したフォルダを<SonarMsbuildフォルダ>と呼ぶ。

設定の変更(必要であれば)

もし、インストール中のマシンと同じマシンで SonarQube サーバが動作してない場合は、以下設定を変更する必要がある。
<SonarMSbuildフォルダ>\SonarQubeAnalysis.xml
<Property Name=”sonar.host.url”> のタグ内に記載されたURLを、localhost から、対象のSonarQubeサーバに接続できるURLに変更。

動作確認

解析対象となるプロジェクトの前後に、ダウンロードした Soner Scanner for MSBuild の実行を挟む必要がある。

コマンド実行内容

以下のように、コマンドを実行する。
cd <解析対象のルートフォルダ>
<SonarMsbuildフォルダ>\MSBuild.SonarQube.Runner.exe begin /k:"sonarqube_project_key" /n:"sonarqube_project_name" /v:"sonarqube_project_version"
"C:\Program Files\MSBuild\14.0\Bin\MSBuild.exe" <ソリューションとか>  /t:Rebuild
<SonarMsbuildフォルダ>\MSBuild.SonarQube.Runner.exe end

※MSBuild の実行部分は、各プロジェクトの内容に応じて、適切な内容に書き換える
※“begin”での呼び出しで引き渡している三つの引数は、任意の内容で良いが、必須で指定する必要がある。
それぞれの意味合いは、大まか以下の通り:
  • /n : SonarQube上でプロジェクト名として表示される
  • /v : SonarQube上でプロジェクトのバージョンとして表示される。数字以外でもOK
  • /k : プロジェクト全体で一意である必要がある、プロジェクトの識別キー。SonarQube上の管理者画面で表示される。
※気軽に解析を試せるソースコードがない場合は、SonarQube の用意したサンプルで試すのが良い:https://github.com/SonarSource/sonar-examples/archive/master.zip

結果の確認

同じマシンからであれば、以下から確認。
(別マシンからであれば、”localhost”部分を、ホスト名なりIPアドレスなりに書き換え)

ソースコードの解析結果と、プロジェクト名などに、引数で指定した値が、そのまま設定されているのが確認できる、はず。

参考:

解析の実行方法:
パラメータ:

以上。

SonarQube のセットアップ手順

概要

ソースコードを解析、その解析結果を蓄積、参照できるツール、SonarQube の最低限のセットアップ手順。

SonarQubeとは

ソースコードの様々な品質を解析し、その結果を蓄積、参照できるようにするWebアプリケーション。
イメージは、以下ページの「Integration」部分の図が分かりやすいように思う:

手順

Java JRE のインストール

インストーラのダウンロードURL
対応するOSのDownload部分のリンクをクリックし、インストール。

DBセットアップ(省略も可能)

PostgreSQL を使って試したので、とりあえずPostgreSQLの手順:
  1. インストーラのダウンロードURL(Download the installerリンクで)

  1. インストール後、以下の通りにDB作成(DBは別の名前でも可)
cd C:\Program Files\PostgreSQL\9.5\bin
createdb -U <DBユーザ名> sonar
※<DBユーザ名>部分は、インストール時に設定したユーザ名で読み替え

なお、その他対応しているDBは以下ページ参照:

SonarQube のセットアップ

ダウンロード/解凍

ダウンロードURL:
上側のSonarQubeの下にあるリンクをクリック
ダウンロード後、zipファイルを任意の場所に解凍(c:\sonarqubeとか)
以後、中身を解凍した場所を<SonarQubeフォルダ>と呼ぶ。

DBの設定

以下ファイルをエディタ開く
<SonarQubeフォルダ>/conf/sonar.properties
開いたファイルに、以下を追記
sonar.jdbc.username=<DBユーザ名>
sonar.jdbc.password=<DBパスワード>
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
※<DBユーザ名>、<DBパスワード>は、データベースにログインできるユーザ名、パスワードに読み替え
※DB名を変更している場合には、上記赤字部分を、変更したDB名に修正

起動方法

「<SonarQubeフォルダ>/bin/」フォルダ配下に、OS毎のフォルダがあるので、該当するフォルダを開き、
  • Windows の場合: StartSonar.bat を実行
  • その他の場:sonar.sh を実行
で、起動するはず。

接続確認

以下のURLにアクセスすると、SonarQube のページが開くはず
以下のような雰囲気)
 

Soner Scanner のセットアップ

実際にソースコードの解析を行うまでの手順。

ダウンロード、解凍

ダウンロードURL:
ダウンロードしたzipファイルを、任意の場所に解凍。
解答した場所を<Soner Scannerフォルダ>と呼ぶ。

Soner Scanner 動作確認

  1. サンプルプロジェクトをダウンロード、解凍
ダウンロードしたzipファイルを、任意の場所に解凍。
解答した場所を<サンプルプロジェクト解凍場所>と呼ぶ。

  1. 解析の実行
コマンドプロンプトを開き、以下の通りに実行:
cd <サンプルプロジェクト解凍場所>\projects\languages\javascript\javascript-sonar-runner
<Sonner Scanner>フォルダ>\bin\sonar-scanner.bat

  1. 解析結果の確認
にアクセスすると、プロジェクトの一覧に、解析した結果が増えているはず。

解析結果表示例)
ここから、プロジェクト名をクリックで、全体の状況を確認したり、
Codeタブで解析したコードの中身を参照したり、
ダッシュボードを見たりと、
かなり多角的に品質を確認できることが分かる。

参考リソース

最小限のインストール、動作確認手順:

以上。

2016年8月16日火曜日

TeamCity Visual Studio Test補足:VSTest と MSTest の差分

概要

TeamCity の Build Step、 Visual Studio Test の「Test engine type」で選択できる, ”VSTest”と”MSTest”の差分についての覚書。
VSTestの方が新しく、細かめの設定が出来るようなので、特にこだわりが無ければ、VSTestで実施するようにした方が無難、かもしれない。。

設定上の差分

下記TeamCityの「Visual Studio Test」のページで確認できる:
VSTest側は、実行するテストケースのフィルタリング、実行する.NETフレームワークの指定ができる、各テストを別々のプロセスで実施など、細かい指定ができるようだ。

試験実施上の差分

Fake Framework を使った試験が存在する場合には、VSTestが必須。MSTestは、Fake Framework に非対応のようだ。

補足:

その他、VSTestとMSTestの差分が説明されていたページ:

以上。

TeamCity 試験の実施 を行うBuild Step(Visual Studio Test)

概要

試験実施を行う「Visual Studio Test」Build Step についての、作り方、簡単な使い方。
これで「試験実施に失敗したら後続フェーズに進まない」ようなビルドの設定を実現できる。

前提条件

実施の上での前提

試験向けのBuild Step より手前に、普通にビルドが終わっている必要がある。
試験向けBuild Step は、基本的に、出来上がっているdll に対してテストを実行する仕組みなので、まずは、普通にビルドを実行するBuild Step を実行する必要がある。

VSTest Build Agent の環境前提

Webアプリをビルドするのでなければ、以下がインストールされていれば大体は問題ないはず(あるいは、Visual Studio)。
  • Microsoft Build Tools 2015 (MSBuildによるビルドに必要)
  • Agents for Microsoft Visual Studio 2015(VSTest, MSTestによるテスト実施に必要)

Build Step の追加

  1. TeamCityサーバにログイン
  2. 対象のプロジェクトを開く
  3. ビルドの設定を開く
  4. 左側のメニューの「Build Steps」をクリック
  5. 「Add build step」ボタンをクリックか、既存のBuild StepのEditをクリック

  1. 最小限の設定は、以下の通り:

設定内容の補足

  • 「Test engine type」が”VSTest”でも“MSTest”でも、最小限の設定は同じ
  • 「Test file names」には、テストの実施対象となるdllを記載する。
    • DLLのパスは、VCSルートからの相対パスで記載。
    • パスにはワイルドカード(*)が使える
    • すぐ下の「Edit excluded assemblies」をクリックすると、テスト実施対象から除外するdllも設定できる

実行結果の確認

テストの実行に失敗した場合は、普通にBuild Stepがビルド失敗した場合と同様に扱われる
成功した場合と失敗した場合の実行結果例)

ので、Build Step の設定で、「テストに失敗していたら、後続のデプロイは実施しない」といった処理が実現できる。

なお、Build列のリンクをクリックで、各テストの結果を詳細に確認できる。
Visual Studio上で実行した場合と、同程度の情報は参照できる。

「Test」タブをクリックすると、試験実施結果を一覧で参照できる。

以上。