SonarQubeシリーズ第二には、DOTNETコア/ C#のコードを分析します

[はじめに]

このシリーズは、分析.netcoreプロジェクトの自動化ジェンキンスを統合する方法をsonarqubeインストールと展開に焦点を当てています。次のように内容は以下のとおりです。

  1. SonarQubeシリーズ、Linuxのインストールと展開
  2. SonarQubeシリーズ第二には、DOTNETコア/ C#のコードを分析します
  3. 3のSonarQubeシリーズ、統合ジェンキンスを達成する方法の自動分析

[]機能の実現

  次のようにこの記事の主な内容を紹介します。

  1. sonarqube下のC#コード解析.netcoreプロジェクト
  2. sonarqubeテストレポート生成部(コードカバレッジ)

[SonarQube C#コード解析]

1.sonarqubeアカウントトークン生成

sonarqubeは、ユーザートークンの生成をサポートしていますので、コマンドラインまたはスクリプトは、アカウントのパスワードの開示を避けるために、アカウントの操作sonarbueに代わってトークンを使用します。

私の口座に右上のsonarqubeホームアバターをクリックします

そして、ユニークなトークンアカウントを生成する生成]をクリックし、ちょうどロゴを入力し、[セキュリティ]タブページを入力してください

トークンは、一度だけ発生し、フォローアップを照会することはできませんので、ダウン手動で彼を入れて、フォローアップが使用されますされています。

2.インストールnetcoreアナライザ

分析netcoreプロジェクトは、Microsoftとソナーと共同で大幅に私たちが使用するツールを簡素化し、多くの作業を行って、ツールやコマンドを表示することができます公式サイト:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for- MSBuildの/

公式によると、直接DOTNETグローバルツールをインストールし、MSBuildの.NETのコアグローバル・ツールを見つけるために私たちを促し

DOTNETツールがインストール- グローバル DOTNET-sonarscanner --version 4.31

インストール後、我々は、コマンドを実行したときに自動的に対応するソナーアカウントを関連付けるように私たちのソナートークンは、コマンドのコンフィギュレーションに注入されて置きます。

インストールディレクトリDOTNETツールでSonarQube.Analysis.xmlという設定ファイルを検索します。

ディレクトリ内の私のxml:/root/.dotnet/tools/.store/dotnet-sonarscanner/4.6.2/dotnet-sonarscanner/4.6.2/tools/netcoreapp2.1/any

その後、我々は、対応するノードアドレスにsonarwebとする上でトークンを記入します。

何の構成が可能でない場合はもちろん、あなたは、トークンを使用して、パラメータとしてコマンドが実行されるたびに記入し、確かではないとして良い便利なワンタイム設定を必要としています。

3. [スタート]解析コード

まず、単にプロジェクトを見つけるために、これは言っているわけではありません。後でコードディレクトリに、コードとすると、今度は次のコマンドを入力します。

コマンドを起動し、次のコマンドは、の使用を三つのパラメータに注意してくださいました

コードだけがSonarQubeアイテム/ N埋めるために生成される:DOTNETは/ K開始sonarscanner sonarqubeを表示するプロジェクト名/ V:現在実行中のアクティブ数(またはタイムスタンプを動的に増加させることができます)

コンパイラのコマンドへのフルパス、プロジェクトxxx.slnファイルの背後にあるDOTNETコア引数に構築

DOTNETビルドxxx.csproj

分析結果はsonarqubeサイトをプッシュ

DOTNETのsonarscannerエンド 

例えば:

:DOTNETのsonarscannerは/k:SevenTiny.Bantina /n:SevenTiny.Bantina / V開始11 

DOTNETビルド20 -溶液/ SevenTiny.Bantina.slnの

DOTNETのsonarscannerの終わりを

しばらくしたら、あなたはプロジェクトの結果は、APIによって自動的に作成されます表示するsonarqubeサイトに行くことができ、成功したログsonarqubeサイトを入力するプッシュを見ることができます。

上述步骤并不会有覆盖率,先忽略,我们后面会继续讲解如何提供单元测试覆盖率。

我们点击标题进入项目详情页:

这里主要报告了几个指标(sonar有默认标准,如果不达标会报警,例如顶端红色错误提示):

Bugs 漏洞:代码中的重大漏洞,可能影响到项目的正常运行,急需改正;

异味:无关紧要的编码不规范问题,建议改正,一般不会影响功能,点开详细信心可以看到规范的使用案例,对规范自己的变成水平有相当大的帮助;

覆盖率:项目的单元测试情况;

重复:项目中的重复代码块,建议重构;

sonarqube 还提供了很多图表来展示多维度的代码分析情况。

【添加单元测试信息】

经过上述步骤并不能实现单元测试的结果展示,事实上,sonarqube 本身也办不到对单元测试的分析,通常的做法是将其他工具生成的单元测试结果整合到 sonarqube 中,借助 sonarqube 来更好地展示单元测试结果。

首先我们的项目要有专门的单元测试项目,并且规范地使用 Assert 等单元测试语句对项目代码进行了单元测试。

1.使用 coverlet 分析单元测试覆盖率

在单元测试项目安装 coverlet.msbuild nuget包(单测项目,不是正式的项目),这种方式便于和dotnet test命令集成。这种方式下, 当它被启用后, 它会集成到dotnet test 这个命令架构里, 在测试运行后自动生成覆盖率报告.

2.通过 dotnet test 命令输出单元测试结果

dotnet test 是 dotnet 默认的集成工具,用于执行单元测试项目并输出测试结果。

执行命令

dotnet test xxxtest.csproj --logger:"trx;LogFileName=test.trx" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/'

上述命令指定了某个测试项目,并输出测试结果为 test.trx 文件,同时输出单元测试覆盖率分析文件为 opencover 格式的文件。

也就是说,上述命令会生成两个文件,一个是单测的结果,一个是单测覆盖率的详情描述 xml 文件。

3.将单测文件集成到sonarqube

打开 sonarqube 的单个项目设置(不是全局设置)

然后找到对应语言的页签,当然我们今天的语言是C#,找到单元测试覆盖率 opencover 的设置区域,用通配符 ** 去匹配生成的单测覆盖率文件。

还有单元测试报告文件设置

这样下次执行 dotnet sonarscanner 命令的时候,就会自动把单元测试的相关文件输出结果也推送到 sonarqube 中。

最后的结果也就是图中展示的那样,显示出了项目代码的单元测试覆盖率,甚至是本次有提交新代码的时候新代码的单元测试覆盖率,如果低于阈值(默认80%)则会出现上面的报警:

点进单元测试覆盖率详情页,我们可以看到更加详细地对单元测试的描述,例如覆盖了多少行代码,漏掉了多少行代码:

点开具体的代码行还可以看到那些行有单元测试的覆盖,总之是非常详尽了...

【扩展】

SonarQube 如何排除不需要分析地代码文件?

有些时候,引入了很多第三方的库(尤其是web项目的jquery库),我们并不需要对第三方引用的库进行分析(甚至会因为包含的杂七杂八的的各种语言脚本太多),那么我们就要将无关的代码排除。

 打开单独项目的设置(非全局设置)

找到排除,可以采用通配符排除文件或文件夹,下面有通配符的使用介绍。

当然了也可以指定哪些文件是需要包含的,这样可以按需进行分析。

【总结】

使用 sonarqube 分析dotnet core/C#代码的全部过程已经完成了,下一章我们会将过程中的所有命令脚本化,使其便于集成CI/CD工具,也便于脚本通用化,方便地应用到多个项目中。

如有任何疑问,欢迎在评论区讨论~

おすすめ

転載: www.cnblogs.com/7tiny/p/11342902.html