SonarQube のセットアップにはかなり厄介な問題があります。
セットアップ
サーバーでは、実行中の SQ 4.5.5 インストールがあります。SonarQube eclipse プラグインを使用して、Sonar 機能を IDE に統合します。現在、SQ Eclipse プラグインのバージョン 3.4 を使用しています。
問題
Eclipse プラグインのいずれかで Sonar の問題を同期化しようとすると、数分かかり、下のスクリーンショットのダイアログが表示されます。
Eclipse ワークスペースの .log ファイルは、SonarQube サーバーに問題を照会するときにタイムアウトを示します。ブラウザーで URL を開くと、ページが読み込まれるまでにかなり時間がかかりますが、最終的にはソナーの問題に関する JSON 形式のデータが表示されます。したがって、明らかにサーバーの問題のように思えます - 私たちのサーバーは、時間内にデータを取得するのが遅いだけです.
!ENTRY org.sonar.ide.eclipse.core 4 4 2016-04-01 08:24:35.561
!MESSAGE Error during issue query org.sonar.wsclient.issue.IssueQuery@f3d040
!STACK 0
org.sonar.ide.eclipse.wsclient.SonarWSClientException: Error during issue query org.sonar.wsclient.issue.IssueQuery@f3d040
at org.sonar.ide.eclipse.wsclient.internal.SonarWSClientFacade.findIssues(SonarWSClientFacade.java:199)
at org.sonar.ide.eclipse.wsclient.internal.SonarWSClientFacade.getUnresolvedRemoteIssuesRecursively(SonarWSClientFacade.java:174)
at org.sonar.ide.eclipse.core.internal.remote.RemoteSourceCode.getRemoteIssuesRecursively(RemoteSourceCode.java:102)
at org.sonar.ide.eclipse.core.internal.jobs.SynchronizeAllIssuesJob.doRefreshIssues(SynchronizeAllIssuesJob.java:138)
at org.sonar.ide.eclipse.core.internal.jobs.SynchronizeAllIssuesJob.fetchRemoteIssues(SynchronizeAllIssuesJob.java:127)
at org.sonar.ide.eclipse.core.internal.jobs.SynchronizeAllIssuesJob.run(SynchronizeAllIssuesJob.java:78)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.lang.IllegalStateException: Fail to request http://AcmeSonarServer:8080/sonar/api/issues/search?resolved=false&pageSize=-1&componentRoots=ACME.Test.All:acmeTests&pageIndex=1
at org.sonar.wsclient.internal.HttpRequestFactory.execute(HttpRequestFactory.java:156)
at org.sonar.wsclient.internal.HttpRequestFactory.get(HttpRequestFactory.java:129)
at org.sonar.wsclient.issue.internal.DefaultIssueClient.find(DefaultIssueClient.java:49)
at org.sonar.ide.eclipse.wsclient.internal.SonarWSClientFacade.findIssues(SonarWSClientFacade.java:195)
... 6 more
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at org.sonar.wsclient.kevinsawicki.HttpRequest.code(HttpRequest.java:1481)
at org.sonar.wsclient.internal.HttpRequestFactory.isSuccess(HttpRequestFactory.java:161)
at org.sonar.wsclient.internal.HttpRequestFactory.execute(HttpRequestFactory.java:149)
... 9 more
この問題は、テストしたすべてのバージョンの Eclipse (Indigo、Luna、Mars) で持続します。私たちが見つけた唯一の回避策は、バージョン 3.5 の SonarQube プラグインをインストールし、オプションの Force full preview instead of incremental analysis をチェックすることでした。ただし、Eclipse プラグインのバージョン 3.4 でオプションをチェックしても役に立ちません。
プラグインをアップグレードしてみませんか?
eclipse プラグインを更新して動作環境を回復する必要があることは明らかですが、バージョン 3.5 には Java 1.7 が必要です。現在、まだ古い 1.6 を使用しているため、現在の環境では簡単にアップグレードできません。
それ以外では、インクリメンタル分析の代わりにフル プレビューを強制するがチェックされていない場合、問題はプラグイン 3.5 に関連しています。したがって、これは、複数の Eclipse バージョンと複数のプラグイン バージョンでエラーが再現可能であることを意味します。
結局、SQ 4.5.5 と Eclipse プラグイン 3.4 を数か月間使用していましたが、前述のタイムアウト動作の原因が何であるかはわかりません。
- Sonar Cube サーバーをより新しいバージョンに更新することは役に立ちますか?
- ここで、データベースのメンテナンス アクション (インデックスの再編成など) は役に立ちますか?
- 時間内に回答を配信できるようにサーバーを構成するにはどうすればよいでしょうか?
アップデート:
以下の私の回答で述べたように、データベース インデックスを毎日再構築すると、最初は役に立ちました。しかし、数日後、インデックスを再構築した直後であっても、SonarQube を使用してローカルの Sonar 分析をトリガーすると失敗します。
SonarQube 4.5.7 への更新も役に立ちませんでした。つまり、基本的には振り出しに戻っています。
- 私たちのソナープロジェクトが大きすぎる可能性はありますか? 私たちは、500k LOC を超える単一のソナー プロジェクトでソフトウェア開発を追跡しています。
- SonarQube 5.x へのアップグレードをお勧めしますか?