読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

SonarとJenkinsを連携させる

Jenkins .NET C#

さて、先日紹介したSonarですが、単体で使うぶんにはあんまり美味しくありません。手動でバッチ叩くなんてやってらんねーですよね。 てなわけで、Jenkins先生登場です。連携させましょう、そうしましょう。

f:id:posaunehm:20131210202909p:plain

できること

できることは、、、まぁ解析を定期的に走らせるだけといえばだけなんですが、プラグインをうまく活用することで、

  • 解析の結果によってビルドを失敗させる
  • 単体テストの実行 → エラー時にアラートもSonarにお任せする

なども可能になります。

解析の定期実行をJenkinsにお任せする

まずは基本から。といってもここの設定が一番めんどくさかったりしますが。

まずはJenkinsにSonarプラグインを導入します。

導入すると、まずPluginの設定をしてやる必要があるのですが、これがちょいと厄介です。プロジェクトの設定でSonarを探してきて、まずひとつAddして「高度な設定」を開くとこんな感じになります。

f:id:posaunehm:20131210202947p:plain

そんで、これを前回のSonarの設定で設定した項目を入れていきます。 ですが、一つだけJenkinsでしか設定しないのがあって、それがDatabase DriverMySQLの場合は"com.mysql.jdbc.Driver"となります。 他のDBとかは右の"?"アイコンを押すと書いてあるのですが、

JDBC driver class. Examples :

とのことです。

ここまで来るともう一息で、実際に解析を行うJobで、"Invoke Standalone Sonar Analysis"を追加して、sonar-project.propertiesへのパスを指定してやればOKです。 これをビルド後の手順に組み込んでやれば、Sonarの解析をJenkinsのビルドプロセスに組み込むことができます。

解析でのアラートによりビルドを失敗させる

さて、解析ができたらそれによってテストを失敗させたいところですよね。ただ、デフォルトでは解析ジョブは解析結果の如何にかかわらず成功してしまいます。それをなんとかするには、SonarのBuild Breakerプラグインを導入しましょう。

Build Breaker Pluginでできることは、「品質プロファイルからの通知」があった時に、ビルドを失敗させる、という単純なものです。

なので、むしろ品質プロファイルで通知を設定することが重要になります。

品質プロファイルでの通知を設定する

品質プロファイルの設定ですが、

  • 品質プロファイル → プロファイルを選択(C#のデフォルトでは"Sonar way") → 通知タブ

にて行います。

f:id:posaunehm:20131210203150p:plain

「通知の作成」とあるコンボボックスでメトリックスを選択し、

f:id:posaunehm:20131210203321p:plain

どれだけの違反を許容するかを選択します。

f:id:posaunehm:20131210203405p:plain

上の例では、「単体テストが一つでも失敗していれば通知を発行する(結果、ビルドを失敗させる)」となります。

他にも、各種メトリックスの設定値や、ルール違反の数などがメトリックスとして選択できますし、前回解析との差分によって失敗させることも可能です。

ここらへんは色々皆さん試してみてください。

コードの負債を残さないためにも、継続的に品質を確認して、必要ならビルドをこかすことは重要ですよね。