0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure DevOps、Visual Studio、Sonarlint、SonarCloudを利用する

Last updated at Posted at 2022-12-06

Azure DevOps、Visual StudioでC#アプリ開発をするにあたって静的コード分析を導入する手順をまとめます。

前提

  • Visual Studio 2022
  • Sonarlint for Visual Studio 2022
  • Sonarcloud
  • Azure DevOps Repos Git

AZ-400のハンズオンラボに詳しくまとまっていることの走り書きです。

今回Sonarを利用する理由としては、Microsoftが出している静的解析は廃止予定。MS自身が別ツールを入れてくれと言っているので、とりあえず有名どころのSonarCloudを入れる。

注意
2022 年 12 月 31 日より、Microsoft Security Code Analysis (MSCA) 拡張機能は廃止される予定です。 既存の MSCA のお客様は、2022 年 12 月 31 日まで MSCA にアクセスできます。 Azure DevOps の代替のオプションについては、OWASP ソースコード分析ツールに関するページを参照してください。 GitHub への移行を計画しているお客様については、GitHub Advanced Security に関するページをご確認ください

VS側の設定

C#のアプリケーションをロードした状態から。VSに必要な拡張機能をインストール、VSを再起動。

Sonarlintをインストール。

初回はRun code anaysis on Solutionが必要。
image.png

それ以降はコードを書くとリアルタイムでWarningを出してくれるようになる。
image.png

Code列の番号を押すとエラーの内容や直し方を教えてくれる。

プロジェクトにEditorConfigを入れる。

image.png
設定はとりあえずデフォルトで。Ctrl+K, Fで自動整形できるようになる。これにより変なエディタの設定をしている人を振るい落とす。

Code Cleanup On Save。Ctrl+K, Fで自動整形が面倒な場合入れる。

個人開発なら以上でいいかもしれない。以下はチーム開発等でAzure DevOpsを使って、CIをしたい場合。

Azure DevOps側の設定

SonarにはSonarCloudとSonarQubeの2種類があります。SonarCloudはSaaS版でSonarQubeは自分でサーバを立てるためひと手間必要になる模様。今回はAzure DevOpsともデフォルトで連携できるSonarCloudを選択。

Azure DevOpsとSonarCloudの連携

基本的にはSonarが出しているオフィシャルドキュメントに従えばできた。

静的解析を呼び出すPipelineを作ってみる

Azure DevOpsとSonarCloudの連携が済み、OrganizationにSonarCloudのExtensionを入れた状態で、Azure DevOpsのPipelineを作ってみる。
トリガーをDevブランチとかにするとDevが変更されるたびに呼ばれるようになるのでいいかもしれない。
Prepare > Build > Analyze > Publish の順番に設定する。

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
  none

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: SonarCloudPrepare@1
  inputs:
    SonarCloud: 'sonarcloud'
    organization: 'devopssimaoh'
    scannerMode: 'MSBuild'
    projectKey: 'DevOpsSimaOH_PartsUnlimited'
    projectName: 'PartsUnlimited'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: SonarCloudAnalyze@1

- task: SonarCloudPublish@1
  inputs:
    pollingTimeoutSec: '300'

これでSonarCloud側で結果が見れるようになる。
image.png

結果の見方はこちら。

Dashboardはあまり詳細な情報は見れない。残念(´・ω・`)。ちゃんと結果を見るにはSonarCloudで見るしかない。
image.png

Pull Requestを静的分析の対象にする

SonarCloudのページで左下のGeneral Settings > Pull Requestsを設定
image.png

Azure DevOpsのMasterでBranch Policyを設定(Devにするべきだった)

  • Status checks
    image.png

  • Build Validation
    Build Pipelineには先ほど作ったPipelineの名前を入力する。
    image.png

試しに適当にソースを修正してPull Requestを作ってみると、、、差分だけが静的分析の対象となり、PullRequestに自動的に警告コメントを入れてくれる。今回は未使用の変数を入れてみたので、コードスメルとして検知された。また、警告が解決されないとMergeできないようになっている。
image.png

SonarcloudとVisual Studio(Sonarlint)をConnectedModeで連携する

必須ではないかもしれせんが、SonarcloudとVisual Studio(Sonarlint)を連携することで、チーム開発用の機能が使えるようになる。簡単に言うと、個々人がローカルのVS(Sonarlint)で実施した設定をSonarcloud経由で連携したり、分析ルールをチームで共有できるようになる模様。

Username/TokenにはTokenだけを入れて、Passwordは空にする。(ここで引っかかった。。)
image.png

Bindする。
image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?