Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SonarQube (SonarCloud) 対応 #674

Merged
merged 47 commits into from
Apr 29, 2019

Conversation

m-tmatma
Copy link
Member

@m-tmatma m-tmatma commented Dec 3, 2018

#510: SonarQube (SonarCloud) 対応

  • SonarQube (SonarCloud) に対応します。
  • SonarQube は静的解析ツールで、クラウド対応したものが SonarCloud です。
  • GitHub のアカウントでログインすることができます。
  • 結果は https://sonarcloud.io/dashboard?id=sakura-editor_sakura で確認できます。
  • Azure Pipelines で解析作業を実施します。
  • 実行に約 1時間かかるので、PR や branch への push のたびに実行せずに毎日決まった時間 (日本時間 0:00) に実行する設定を行います。
  • どのタイミングで実施するかは azure-pipelines.yml の condition の設定で variables['Build.Reason'] の値をもとに限定しています。
  • SonarQube.md のドキュメントに手順等記載しています。

@m-tmatma m-tmatma changed the title Sonar [WIP] SonarQube 対応 Dec 3, 2018
@m-tmatma m-tmatma changed the title [WIP] SonarQube 対応 [WIP] SonarQube (SonarCloud) 対応 Dec 3, 2018
@m-tmatma
Copy link
Member Author

m-tmatma commented Dec 3, 2018

タイトル、本文が途中で登録されてしまったので、修正しました。

@m-tmatma
Copy link
Member Author

m-tmatma commented Dec 3, 2018

appveyor 上で実行すると、job の実行時間が 1時間以内という appveyor の制限に引っかかって
ビルドに失敗するので appveyor 上での実行を無効にしています。
ローカルでビルドして、解析結果を SonarCloud 上にアップすることも可能です。

↓ 以下はローカルでビルド、解析した結果を SonarCloud 上にアップしたものです。
https://sonarcloud.io/dashboard?id=sakura-editor_sakura

とりあえず、動かすところまでできたので、
導入するか? という議論のたたき台にするための情報共有が目的です。

@m-tmatma m-tmatma added research 実現可能性調査【ChangeLog除外】 CI appveyor など CI 関連 【ChangeLog除外】 labels Dec 3, 2018
@m-tmatma
Copy link
Member Author

m-tmatma commented Dec 3, 2018

いろいろ試行錯誤のコミットがあるので、わかりずらいということであれば
rebase してきれいにします。

また build-sln.bat もこの対応のためのリファクタリングが入っているので
必要であれば、別 PR にすることも可能です。

@m-tmatma
Copy link
Member Author

m-tmatma commented Dec 3, 2018

appveyor 上で実行すると、job の実行時間が 1時間以内という appveyor の制限に引っかかって

appveyor/ci#517
によると 1時間30分までは延長してもらえるみたい。

@m-tmatma
Copy link
Member Author

m-tmatma commented Dec 3, 2018

導入するか? という議論のたたき台にするための情報共有が目的です。

補足: すべてのビルドで実行するのは想定してなくて、多くても一日一回、長くて一週間に一回くらい
実行すればいいかな、と考えています。

@m-tmatma
Copy link
Member Author

appveyor/ci#2818 作成

@berryzplus
Copy link
Contributor

https://sonarcloud.io/dashboard?id=sakura-editor_sakura

よさげ。(ただの感想

@m-tmatma m-tmatma force-pushed the feature/SonarQube branch 2 times, most recently from 2d4f8f6 to 4152ed8 Compare February 16, 2019 21:59
@m-tmatma m-tmatma force-pushed the feature/SonarQube branch 2 times, most recently from 1527f48 to 2f4d43b Compare March 29, 2019 20:48
@m-tmatma m-tmatma force-pushed the feature/SonarQube branch 2 times, most recently from 961f87e to e79d580 Compare April 6, 2019 21:39
@m-tmatma m-tmatma changed the title [WIP] SonarQube (SonarCloud) 対応 SonarQube (SonarCloud) 対応 Apr 7, 2019
@m-tmatma m-tmatma added this to the v2.4.0 milestone Apr 7, 2019
@m-tmatma
Copy link
Member Author

m-tmatma commented Apr 7, 2019

対応完了しました。レビューお願いします。

SonarQube.md Outdated Show resolved Hide resolved
@berryzplus
Copy link
Contributor

ちゃんと動かしてから判断しようと思って動作確認中。

さっきまで curl本家 に繋がらなくてだいぶ焦りました。

@m-tmatma
Copy link
Member Author

さっきまで curl本家 に繋がらなくてだいぶ焦りました。

Git をインストールすると "C:\Program Files\Git\mingw64\bin\curl.exe" にインストールされています。

@m-tmatma
Copy link
Member Author

さっきまで curl本家 に繋がらなくてだいぶ焦りました。

Git をインストールすると "C:\Program Files\Git\mingw64\bin\curl.exe" にインストールされています。

ドキュメントに追加しました。

@berryzplus
Copy link
Contributor

動作確認状況...

  • とりあえずローカルで実行することには成功
  • 検証用のプロジェクトに結果反映することにも成功
  • ソースコード変更したら結果が更新されることを確認
  • ビルドプロセスで時間が掛かるのは sonarscanner end の部分だと気付く
  • 環境変数経由でjavaスタックサイズを調整できると書いてあった気がする(-mx512m)ので、その設定を弄ったら時間短縮になったりしないだろうか。-mx512mは小さすぎないだろうか。
  • Coverageを取ってサマリ表示する機能があることに気付く
  • カバレッジ表示するには sonarscanner begin ~ sonarscanner end の間にテストを実行する必要がありそう。現在は build-sln.bat の中で sonarscanner end してるので「これでいいんだっけ?」と考え中。
  • vstest.console.exe(visual studioのテスト実行ツール)にはカバレッジを取るモードがあるが、これでカバレッジを取るにはDebugビルドする必要があるらしい。←やるならビルド環境に制限が付く。
  • カバレッジを取るには vs2017 Enterprize が必要?どうしてもダメならMinGWビルドにgcov仕込むプランの模索もあると思ってる。ある意味、そういうことするためにgcc環境を残してあるわけで。

@berryzplus
Copy link
Contributor

メモ:SonarScannerの実行要件 https://docs.sonarqube.org/display/SCAN/Install+the+SonarScanner+for+MSBuild

Prerequisites  
To execute analysis with SonarScanner for MSBuild you need to have:
•Java Runtime Environment 8 (JRE 8) on your machine. Also make sure that the $JAVA_HOME environment variable points to the path where JRE 8 is installed.
•a SonarCloud account or a SonarQube server.

Java実行環境は8推奨、JDKでもJREでもいいが、OpenJDKかOracleJDKを使うように、とのこと。

@berryzplus
Copy link
Contributor

スキャナーが遅い件

スキャナーのメモリは、増やしてもあんまり速度変わらんかったです。
この件は諦めます:cry:

カバレッジを取って反映する件

カバレッジ収集に関するマニュアル

  • sonar.cxx.coverage.reportPath for unit test coverage

この辺のPRで出てくる googletest の --gtest_output オプションの話が関係してくるんじゃなかろうか。

ビルド済みの gmain 利用プログラムを動かす分には、
visual studio の Enterprise Edition 以上が必要、
という制約もパスできるように思います。

PRの評価とは別に、引き続き調査検討をしていきたいと思っています。

このPRのマージに至るまでの残件

問題は、テストのビルドと実行を sonarscaner end の前に持っていく対応を、初期導入から入れるか否かだと思います。

そもそもの話、テストカバレッジを分析対象としたいか否か

やるための機構があるのだから、ぼくは対象にしたほうがいいと思ってます。
今すぐに導入しても カバレッジ 1%未満 とか表示されて ショボーン になるので、
初期導入では「あえて対応しない」の考え方もアリだと思います。

現時点で SonarQube を使い始めるのに十分な環境が整備されたという判断なんですが、
カバレッジ分析を使えるようにするために大きな変更が要りそう、って点がapprove躊躇の要因になっています。

さて、どうしたもんでしょう。

@m-tmatma
Copy link
Member Author

別に一つの PR で全部やる必要はないと思います。
単体テストはあえてこの PR では対象にはしてません。

PR は可能な限り小さくするのがいいです。

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

初期導入として申し分ない整備状況だと思います。

これでココの情報が日々更新されるようになるという理解です。
https://sonarcloud.io/dashboard?id=sakura-editor_sakura

別に一つの PR で全部やる必要はないと思います。
単体テストはあえてこの PR では対象にはしてません。

PR は可能な限り小さくするのがいいです。

そろそろ理解の許容限界を超えてきそうなので、いったん運用を始めてみましょう。
これもまぁ、問題がなくても変化していく開拓分野ですし。

@m-tmatma m-tmatma merged commit 30e020c into sakura-editor:master Apr 29, 2019
@m-tmatma
Copy link
Member Author

マージして以下のように定期実行設定したら、 https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=306 のようにビルドが走った。

azure-pipelines-scheduled

@m-tmatma
Copy link
Member Author

以下の設定に戻した。

azure-pipelines-am0000

@berryzplus
Copy link
Contributor

スキャナーが遅い件

スキャナーのメモリは、増やしてもあんまり速度変わらんかったです。
この件は諦めます😢

ローカルでうまくやる方法を見付けたのでとりあえず共有。

@rem to ensure hide variable SONAR_QUBE_TOKEN
@echo off
"%SonarScanner_MSBUILD%" begin                      ^
	/k:"%SONAR_QUBE_PROJECT%"                       ^
	/o:"%SONAR_QUBE_ORG%"                           ^
	/d:sonar.cfamily.build-wrapper-output=%~dp0bw-output ^
	/d:sonar.cfamily.threads=%NUMBER_OF_PROCESSORS%  ^
	/d:sonar.sourceEncoding=UTF-8                   ^
	/d:sonar.host.url="https://sonarcloud.io"       ^
	/d:sonar.login="%SONAR_QUBE_TOKEN%"

同時実行スレッド数 sonar.cfamily.threads がデフォルトでは 1 に設定されている。
ここに環境依存の値(=利用可能なコア数)を入れてやると解析速度が劇的に改善する。
1スレッドで1時間かかる作業も、4スレッドなら15分で終わる。

Azule Pipelines で %NUMBER_OF_PROCESSORS% がどれくらいかは分かりませんが、リアルに1コアってことはないと思うので、それなりな改善を見込めると思われます。

うちの環境で スレッド数=4 にして実行させて見たログです。

INFO: Analysis total time: 11:51.584 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 11:56.458s
INFO: Final Memory: 34M/1375M
INFO: ------------------------------------------------------------------------
The SonarQube Scanner has finished

利用可能なコア数が8とかだったら10分を切りそうな感じに効果てきめんなので、試してみる価値がありそうです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
azure pipelines CI appveyor など CI 関連 【ChangeLog除外】 research 実現可能性調査【ChangeLog除外】 static analysis
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants