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

【DO NOT MERGE】SonarCloud連携テスト #7

Open
wants to merge 26 commits into
base: master
Choose a base branch
from

Conversation

louvre2489
Copy link
Collaborator

@louvre2489 louvre2489 commented Oct 15, 2020

WHY

SonarCloudでカバレッジを取得できるようにして、カバレッジ率の推移を確認できるようにする

HOW

以下の選択肢がある

  1. SonarCloudの自動解析機能でカバレッジを取得できるようにする
  2. sonar-scalaプラグインを入れてカバレッジを取得できるようにする
  3. CircleCIでカバレッジを取得できるようにする

選択肢1:SonarCloudの自動解析機能でカバレッジを取得できるようにする

公式ドキュメントに以下の記述がある。

Current limitations
・Code coverage information is not supported.

SonarCloudは自動解析機能でカバレッジ取得をサポートしていなさそう

  • SonarCloudはSonarQubeのクラウド版であり、SonarQubeのコードやドキュメントが流用されている
  • そのため管理画面でカバレッジ取得のためのプロパティが設定できたり、ドキュメントにプロパティの説明が記載されていたりするのだと思われる

選択肢2:sonar-scalaプラグインを入れてカバレッジを取得できるようにする

  • 【DO NOT MERGE】SonarCloud連携テスト #7 (comment) でカバレッジを取得することができることを確認できた
  • この時はSonarCloudの自動解析機能をOFFにしないと、スキャン結果をレポートする際にエラーになるので注意
  • ただし、以下の課題が未解決
    • フィーチャーブランチに対して取得したスキャン結果(カバレッジ含む)がメインブランチのスキャン結果としてレポートされてしまう
      • これはsonar.pullrequest.branch/sonar.pullrequest.baseを指定することで解決するかもしれないが未確認
    • SonarCloudからのフィードバックコメントがGitHubのP-Rに表示されない
  • 仮にうまくいったとしても、SonarCloudのI/F変更にプラグインが追従できなくて使えなくなる可能性がある

選択肢3:CircleCIでカバレッジを取得できるようにする

  • 【DO NOT MERGE】SonarCloud連携テスト #7 (comment) でカバレッジを取得することができることを確認できた
  • この時はSonarCloudの自動解析機能をOFFにしないと、スキャン結果をレポートする際にエラーになるので注意
  • 実現したいことが実現できている
  • config.ymlに記述する内容はSonarCloudが提供してくれるテンプレートに則っているのでトラブルが起きる可能性も低い
version: 2.1

jobs:
  build:
    docker:
      - image: '********** CHANGE ME 1 **********'
    steps:
      - checkout
      - run:
          name: Install dependencies and build project
          command: ********** CHANGE ME 2 **********
      - sonarcloud/scan

orbs:
  sonarcloud: sonarsource/sonarcloud@1.0.1

workflows:
  main:
    jobs:
      - build:
          context: SonarCloud

選択肢3を採用する上での検討事項

分析結果画面に以下のように表示されている。
これは選択肢2でカバレッジ取得した際には表示されていなかった(はず...)
Screenshot from 2020-10-31 09-04-45

The version of Java (1.8.0_242) you have used to run this analysis is deprecated and we will stop accepting it from October 2020. Please update to at least Java 11. Read more here

リンク先の文章は以下のとおり(URL的に、時間の経過で内容が見れなくなる可能性があるのでコピペ)

Upcoming Changes

October 2020 - Move analysis to Java 11

The version of Java installed in the scanner environment should be upgraded to at least Java 11 by October 2020.
Pre-11 versions of Java are already deprecated and scanners using them will stop functioning after October 2020.
This refers specifically to the JDK or JRE installed and used in the context where your SonarCloud scanner analysis tool is running.
This may be your local build environment or your CI service.
This does not have any impact on the Java version targeted by your project code.
You can still analyze Java projects that target versions less than 11. See Move analysis to Java 11.

プロダクションコードのJDKバージョンには影響されないとのことなので、CI内で使用するイメージをバージョンアップすれば問題なさそうだが未確認。

検討

プロダクションのJDKバージョンを上げてから合わせてCI内で使用するバージョンも上げるべきか?

@louvre2489
Copy link
Collaborator Author

louvre2489 commented Oct 29, 2020

上記コミット:d8ab2f9 を入れた状態で以下のコマンドを実行すれば、sonar-scalaによってカバレッジ取得できることは確認できました。
(ローカル実行のみで、CIからは叩いていません)

sbt clean coverage test coverageReport sonarScan

ただし、SonarCloudへの情報連携がメインブランチに対してしか実行できず、、、
フィーチャーブランチでスキャンした内容もメインブランチに飛んでいます。
スクリーンショット 2020-10-29 16 30 08

sonar-scalaのドキュメントを見てみてもブランチを指定するプロパティは見つかりません。。。
以下が一番それらしきページです。
https://sonar-scala.com/docs/setup/pr-decoration

sonar.scala.pullrequest.numberが一番それっぽいので設定してみましたが効果はなし。

コード内も検索してみましたが、branchでひっかかる箇所でそれらしき箇所はヒットせずです・・・

残課題:

  • フィーチャーブランチに正しくスキャン結果がレポートされない
  • GitHubのP-Rコメントにスキャン結果がフィードバックされない

追記

ブランチはsonar.pullrequest.branchを指定したら良いかもしれない
合わせてsonar.pullrequest.baseも指定した方が良さげ

@louvre2489
Copy link
Collaborator Author

上記設定をする際、SonarCloud側の自動解析機能をOFFにしないといけないことに注意。
スクリーンショット 2020-10-29 16 39 33

@louvre2489
Copy link
Collaborator Author

louvre2489 commented Oct 29, 2020

SonarCloudの自動解析機能ではカバレッジを取得できない疑惑が浮上しました。

https://www.chatwork.com/#!rid176555138-1373665227349950464
https://www.chatwork.com/#!rid176555138-1373665502089445376

自動解析によるカバレッジ取得はいったん諦めることにする

@louvre2489
Copy link
Collaborator Author

louvre2489 commented Oct 30, 2020

SonarCloudの自動解析機能ではカバレッジが取得できないようなので、以下の対応をしました。

  • CircleCIでカバレッジ取得してスキャンするようにするために、config.ymlを追加
  • sonar-project.propertiesを追加
  • scoverageプラグインを追加
  • build.sntでカバレッジ取得を有効にする
  • SonarCloudの自動解析をOFFにする

スクリーンショット 2020-10-30 21 22 24

@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities (and Security Hotspot 0 Security Hotspots to review)
Code Smell A 0 Code Smells

84.4% 84.4% Coverage
0.0% 0.0% Duplication

@louvre2489
Copy link
Collaborator Author

File Changedにてカバレッジを取得できるようにするための最低限の対応方法がわかりやすくなるよう整理しました。
その結果、CIがテストでコケるようになるため最新のコミットではSonarCloudのスキャンが起動していません。


当リポジトリは演習用リポジトリのため。
演習をクリアしてテストが通るようになったら再びSonarCloudのスキャンが起動するようになります。

sonar.sourceEncoding=UTF-8

sonar.sources=src/main
sonar.tests=src/test
Copy link
Collaborator Author

@louvre2489 louvre2489 Oct 30, 2020

Choose a reason for hiding this comment

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

この2行は不要かもしれない...

sonarにテストを指示するためのプロパティですが、
CircleCIでsbtでテストをするようにしているので、このプロパティは使用されることがない気がしています

@louvre2489 louvre2489 changed the title SonarCloud連携テスト 【DO NOT MERGE】SonarCloud連携テスト Oct 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant