web-dev-qa-db-ja.com

SonarQubeでのQualityGateの失敗は、Teamcityでのビルドに失敗しません

TeamCityでビルドプロジェクトをセットアップし、Sonarqubeを統合しました。プロジェクトはビルドされており、SonarQubeコンソールでレポートを正常に公開しています。しかし、品質ゲートが失敗しても、ビルドが壊れることはありません。ビルドブレーカーについて検索して読みましたが、このドキュメントとしてTeamCityのSonarqubeプラグインですでにサポートされています https://confluence.jetbrains.com/display/TW/SonarQube+Integration

構成するものや落とし穴がありませんか?私はたくさん検索しようとしましたが、適切なドキュメントを見つけることも、それを導くこともできませんでした。

4
Nikit Swaraj

ええ、ビルドを中断するには、終了ステータスを使用してカスタムスクリプトを作成する必要があります。 APIを使用してQGのステータスを分析しました。

PROJECTKEY="%teamcity.project.id%"
QGSTATUS=`curl -s -u  SONAR_TOKEN: http://SONAR_URL:9000/api/qualitygates/project_status?projectKey=$PROJECTKEY | jq '.projectStatus.status' | tr -d '"'`
if [ "$QGSTATUS" = "OK" ]
then
exit 0
Elif [ "$QGSTATUS" = "ERROR" ]
then
exit 1
fi    
3
Nikit Swaraj

品質ゲートが失敗しても、SonarQubeプラグインはビルドを中断しません。どうして?ここではすべてについて説明します: ビルドブレーカーを使用すべきでない理由

主な結論は次のとおりです。

[...] SonarSourceはこの機能を継続したくありません。 [...]

ウォールボードの使用を開始すると、Build Breakerプラグインの使用を停止しましたが、それでも使用は問題ないと考えていました。そして、アナライザーとデータベース間の接続を切断するSonarQube5.2が登場しました。このカットには、アーキテクチャの大幅な変更など、多くの優れた点があります。ソースコードの分析はアナライザー側で行われ、すべての集計数の計算はサーバー側で行われるようになりました。つまり…アナライザーはQualityGateについてもう知りません。サーバーのみが実行し、分析レポートはシリアルに処理されるため、先着順であるため、ジョブのQualityGateの結果が利用可能になるまでに時間がかかる場合があります。

言い換えれば、私たちの観点からは、ビルドブレーカー機能はもはや意味がありません。

品質ゲートのステータスを自分で確認する必要があります。ここでそれを行う方法を読むことができます: sonarqube apiから品質ゲートステータスにアクセスします


xpmatteo 質問への答え:

引用された説明が何を意味するのか理解するのが難しいと思うのは私だけですか?

2つのツールがあります。 SonarScannerとSonarQube。

1)SonarScannerはCIサーバーで実行されます。ソースコードを分析し、分析結果をSonarQubeサーバーにプッシュします。

2)SonarQubeサーバーはデータを処理し、新しい変更がQualityGatesを通過するかどうかを認識します。

SonarScannerは最終結果(合格または不合格)を認識しないため、ビルドに失敗することはありません(すべてのデータを処理し、結果のみをデータベースにプッシュしていたため、SQ 5.2より前にそのような情報がありました)。これは、現在の設計のために機能しないため、BuildBreakerプラグインに意味がないことを意味します。 SonarScannerを実行した後、サーバーをポーリングしてQualityGatesのステータスを確認する必要があります。次に、ビルドを失敗させるかどうかを決定できます。

3
agabrys

sonar.qualitygate.wait=trueパラメーターを使用してQualityGate設定に基づいてビルドを失敗させることができました。

彼らのGitLabパイプラインサンプルページに例があります: https://docs.sonarqube.org/latest/analysis/gitlab-cicd/

0
Alexey Zimarev

あなたを助けるかもしれない以下の投稿に従ってください。

https://docs.sonarqube.org/display/SONARQUBE45/Build+Breaker+Plugin

属性「sonar.buildbreaker.skip」を使用してsonarqubeタスクを実行します。

例:gradle clean build sonarqube publish -Dsonar.buildbreaker.skip = false

0
jatin Goyal