2016年10月2日日曜日

TeamCity ビルド結果をダウンロードできるようにする

概要

TeamCityで実行したビルド結果を、TeamCityのWebページ上からダウンロードできるようにする設定方法。

手順

ダウンロードしたいビルド結果を作るビルド の Build Configuration を開く
このようなページ:

General Settings の Artifact Paths に、ダウンロードしたいビルド結果ファイルを追加する
(ここで指定するパスは、基本的にチェックアウトしたフォルダからの相対パス)

設定例1)生成されたファイルの内、dllファイルをArtifactにする。
+:SimpleClassLibrary/bin/*/*.dll

設定例2)生成されたファイルの内、pdbファイルを除いてArtifactにする。
+:SimpleClassLibrary/bin/*/*
-:SimpleClassLibrary/bin/*/*.pdb

※bin フォルダ直下のフォルダ名が「/*」となっているのは、”Debug”でも”Release”でも正しく保存されるようにするため

パスの手前に「+:」がついているパスから、「-:」がついているパスに該当するファイルが除外されて、最終的にArtifact として保存されるファイルが決まる。

使える特殊文字
* 任意のファイル名、フォルダ名を表す
** 任意のフォルダ階層。


「Save」ボタンをクリックして、設定を保存する

ビルド結果のダウンロード

上記までの手順だけで、ビルドすると、ビルド結果の「Artifact」タブで、指定したファイルがダウンロードできるようになっている。

ビルド結果例)
Artifact タブで、 dll ファイルなどがダウンロード出来るようになっている:


よく起こりがちな「どの状態で試験したのかわからない」「試験実行時の環境を再現できない」「いつ不具合が作りこまれたのか?」といった問題を回避・調査するのに、かなりの効果があるように思う。

以上。

2016年9月4日日曜日

SonarLint for Visual Studio で、実装中にコード解析結果を確認

概要

SonarQubeと同じルールで、VisualStudio上でソースファイルのルール違反部分をその場で表示できるようになる。

参考

  • Visual Studio 上で、SonarQube サーバと連携方法
  • SonarLint ルール一覧

導入手順

Plugin のダウンロードURL

Download ボタンをクリックして、ダウンロードしたファイルを実行で、インストール。
使用を開始するにあたって、Visual Studio 側では、特に設定は必要ない。

簡単な機能説明

Sonarlint をインストールした後に怪しげなコードを打ち込むと、エラー一覧に、SonarLintのルールに則った警告が出てくるようになる。

怪しげなコードのサンプル:

using System.IO;

namespace SimpleClassLibrary
{
   public class SimpleExampleClass
   {
       private TextReader reader;

       public SimpleExampleClass()
       {
           this.reader = new StreamReader("some path");
           Initialize();

       }

       private void Initialize()
       {
       }

       public string SomeRead()
       {
           string someStr = "someValue";
           string retVal = reader.ReadLine();
           return retVal;
       }
   }
}
出てきた警告:
※上のエラー一覧で、”S”から始まるコードを持つ警告が、Sonarlintが出力している警告。
青い字のコードをクリックすると、内容の説明と、一般的な修正方法を説明したSonarLintのページに飛ぶ。

ルールの有効化/無効化

プロジェクトのRefences > Analyzer を右クリックし、「Open Active Rule Set」をクリック

開かれたダイアログの「SonarAnalyzer.CSharp」の配下に、SonarLintでチェックしているルールがぞろっと出てくるので、左側のチェックボックスで、有効/無効を切り替える。

なお、設定を変更すると、RuleSetファイルが自動的に作成される。

SonarQube サーバとの接続

もし、SonarQube サーバを別に構築済であれば、SonarQubeサーバと接続して、解析するルールの内容を、SonarQubeサーバ側と同期することが出来る。

  1. トップメニューの Analize > SonarQube Connection をクリック

  1. チームエクスプローラにSonarQube が表示されるので、connect をクリック

  1. SonarQube ServerのURL、ユーザー名、パスワードを入力の上、「Connect」をクリック
※特にユーザ、パスワードを設定していない場合には、Server のURLだけで問題なし。
「SonarQube server:」には、SonarQube の画面を開く際に普通にアクセスしているURLを入力すればよい

  1. SonarQube のプロジェクト一覧が表示される

  1. 現在のソリューションに対応するプロジェクトを右クリックし、「Bind」をクリック
これで、ソリューションに必要なファイルが追加される。

定義の更新:

サーバのルールなどを取り込みなおしたい合には、TeamExploerを開き、プロジェクトを右クリック して、 Update を選択すると、サーバから設定を取り込みなおせる:



SonarLintを利用すれば、実装中に、ソースコードの品質を開発者がより確認しやすくなる。
SonarQube 上への品質情報の保存と共に利用すれば、チーム全体の品質に対する意識が大きく向上できる気がする。
個人で作業する場合でも、うっかりしたミスを減らせるので、ありがたい存在である。


蛇足メモ:サーバ接続時のトラブル

SonarQube サーバへの接続時、自環境では、うまく動かないことがあった。
SonarAnalizer.CSharp のバージョンが古い? か、上手くインストールできていなかった?ようなので、Package Manager コンソールで、以下コマンドを実行して、SonarAnalyzerを入れなおしたら、上手く動くようになった。
コマンド:
Install-Package SonarAnalyzer.CSharp


以上。

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

以上。