_著者は、https://www.brightfunds.org/organizations/internet-archive [インターネットアーカイブ]を選択して、https://do.co/w4do-cta [Donations for DOnations]プログラムの一環として寄付を受け取りました。

前書き

_コード品質_は、特定のコードがどれほど有用で保守可能であるかの近似値です。 品質の高いコードは、アプリケーションの保守と拡張のタスクを簡単にします。 これにより、将来必要な変更を加えたときに発生するバグが少なくなります。

SonarQubeは、コード品質の分析とレポート作成を支援するオープンソースのツールです。 ソースコードをスキャンして潜在的なバグ、脆弱性、保守性の問題を探し、レポートに結果を表示します。これにより、アプリケーションの潜在的な問題を特定できます。

SonarQubeツール自体は、コード分析を行うために開発者のマシンにローカルにインストールされるアプリケーションであるスキャナーと、記録管理とレポート作成のための集中サーバーという2つの部分で構成されています。 1つのSonarQubeサーバーインスタンスで複数のスキャナーをサポートできるため、多くの開発者からのコード品質レポートを1か所で集中管理できます。

このガイドでは、SonarQubeサーバーとスキャナーを展開して、コードを分析し、コード品質レポートを作成します。 次に、SonarQubeスキャナーでサンプルコードをスキャンして、マシンでテストを実行します。

前提条件

このガイドを始める前に、次のものが必要です。

  • このhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04#step-4-%E2に従って設定された* 3GB以上のメモリを備えたUbuntu 18.04サーバー1台%80%94-setting-up-a-basic-firewall [Ubuntu 18.04での初期サーバー設定]、sudo非rootユーザーとファイアウォールを含む。

  • https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04#のOracle JDKセクションに従って構成された、サーバーにインストールされたOracle Java 8 oracle-jdkのインストール[このOracle JDKインストールチュートリアル]。

  • NginxおよびMySQL。https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04のNginxおよびMySQLセクションに従って構成されます。 [このLEMPインストールガイド]。

  • https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04#stepに従って構成されたCertbot(Let’s Encryptクライアント) -1-%E2%80%94-installing-certbot [Ubuntu 18.04で暗号化してNginxを保護する方法]。

  • SonarQubeをインストールするサーバーを指す完全修飾ドメイン名とAレコード。 DigitalOceanのDNSサービスを使用している場合は、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-dns#a-records [このDNSレコード設定ガイド]を使用して設定できます。 このチュートリアルでは、「+ sonarqube.example.com +」を使用します。

手順1-インストールの準備

SonarQubeのインストールを準備するには、いくつかの手順を完了する必要があります。 SonarQubeはサービスとして実行されるJavaアプリケーションであり、* root *ユーザーとしてサービスを実行したくないため、SonarQubeサービスを実行するための別のシステムユーザーを作成します。 その後、インストールディレクトリを作成してその権限を設定し、SonarQubeのMySQLデータベースとユーザーを作成します。

まず、* sonarqube *ユーザーを作成します。

sudo adduser --system --no-create-home --group --disabled-login

このユーザーはSonarQubeサービスの実行にのみ使用されるため、サーバーに直接ログインできないシステムユーザーが作成されます。

次に、SonarQubeをインストールするディレクトリを作成します。

sudo mkdir /opt/

SonarQubeリリースはzip形式でパッケージ化されているため、これらのファイルを抽出できるようにする `+ unzip +`ユーティリティをインストールします。

sudo apt-get install unzip

次に、SonarQubeが使用するデータベースと資格情報を作成します。 * root *ユーザーとしてMySQLサーバーにログインします。

sudo mysql -u root -p

次に、SonarQubeデータベースを作成します。

CREATE DATABASE sonarqube;

次に、SonarQubeがデータベースへのアクセスに使用する資格情報を作成します。

CREATE USER [email protected]'localhost' IDENTIFIED BY ;

次に、新しく作成されたユーザーがSonarQubeデータベースを変更できるようにアクセス許可を付与します。

GRANT ALL ON sonarqube.* to [email protected]'localhost';

次に、パーミッションの変更を適用して、MySQLコンソールを終了します。

FLUSH PRIVILEGES;
EXIT;

ユーザーとディレクトリが用意できたので、SonarQubeサーバーをダウンロードしてインストールします。

ステップ2-SonarQubeのダウンロードとインストール

現在の作業ディレクトリをSonarQubeインストールディレクトリに変更することから始めます。

cd /opt/sonarqube

次に、https://www.sonarqube.org/downloads/ [SonarQubeダウンロードページ]に移動し、SonarQube 7.5 Community Editionのダウンロードリンクを取得します。 SonarQubeには多くのバージョンとフレーバーがページからダウンロードできますが、この特定のチュートリアルではSonarQube 7.5 Community Editionを使用します。

リンクを取得したら、ファイルをダウンロードします。

sudo wget

ファイルを解凍します。

sudo unzip

ファイルが解凍されたら、ダウンロードしたzipファイルが不要になったため削除します。

sudo rm

最後に、* sonarqube *ユーザーがこれらのファイルを所有し、このディレクトリ内のファイルを読み書きできるように、アクセス許可を更新します。

sudo chown -R : /opt/sonarqube

すべてのファイルが配置されたので、SonarQubeサーバーの構成に進むことができます。

ステップ3-SonarQubeサーバーの構成

SonarQube構成ファイルでいくつかを編集する必要があります。 すなわち:

  • SonarQubeサーバーがデータベース接続に使用するユーザー名とパスワードを指定する必要があります。

  • また、SonarQubeにバックエンドデータベースにMySQLを使用するように指示する必要があります。

  • SonarQubeにサーバーモードで実行するように指示すると、パフォーマンスが向上します。

  • また、リバースプロキシを使用するため、SonarQubeにローカルネットワークアドレスのみでリッスンするように指示します。

SonarQube構成ファイルを開くことから始めます。

sudo nano /conf/sonar.properties

まず、SonarQubeがデータベースへのアクセスに使用するユーザー名とパスワードを、MySQL用に作成したユーザー名とパスワードに変更します。

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

   ...

   sonar.jdbc.username=
   sonar.jdbc.password=

   ...

次に、MySQLをデータベースドライバーとして使用するようSonarQubeに指示します。

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

   ...

   sonar.jdbc.url=jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

   ...

SonarQubeのこのインスタンスは専用サーバーとして実行されるため、 `+ -server +`オプションを追加してSonarQubeのサーバーモードを有効にできます。これはパフォーマンスの最大化に役立ちます。

NginxはSonarQubeクライアントとサーバー間の通信を処理するため、ローカルアドレスのみをリッスンするようSonarQubeに指示します。

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

   ...

   sonar.web.javaAdditionalOpts=
   sonar.web.host=127.0.0.1

これらの値を更新したら、ファイルを保存して閉じます。

次に、https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal [Systemd]を使用して、SonarQubeがサービスとして実行されるように設定します。再起動時に自動的に開始されます。

サービスファイルを作成します。

sudo nano /etc/systemd/system/sonarqube.service

SonarQubeサービスの開始および停止方法を指定する次のコンテンツをファイルに追加します。

/etc/systemd/system/sonarqube.service

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking

ExecStart=/opt/sonarqube//bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube//bin/linux-x86-64/sonar.sh stop

User=
Group=
Restart=always

[Install]
WantedBy=multi-user.target

systemdユニットファイルの詳細については、https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [Systemdユニットとユニットファイルについて]を参照してください。

ファイルを閉じて保存し、SonarQubeサービスを開始します。

sudo service sonarqube start

SonarQubeサービスのステータスをチェックして、サービスが開始され、期待どおりに実行されていることを確認します。

service sonarqube status

サービスが正常に開始されると、次のような「アクティブ」という行が表示されます。

● sonarqube.service - SonarQube service
  Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset
   since Sat 2019-01-05 19:00:00 UTC; 2s ago

次に、ブート時にSonarQubeサービスが自動的に開始するように構成します。

sudo systemctl enable sonarqube

この時点で、SonarQubeサーバーが完全に初期化されるまでに数分かかります。 HTTPポートを照会することにより、サーバーが起動したかどうかを確認できます。

curl http://127.0.0.1:9000

初期化プロセスが完了すると、次のステップに進むことができます。

手順4-リバースプロキシの構成

SonarQubeサーバーが実行されたので、Nginxを設定します。これはSonarQubeインスタンスのリバースプロキシおよびHTTPSターミネーターになります。

サイトの新しいNginx構成ファイルを作成することから始めます。

sudo nano /etc/nginx/sites-enabled/sonarqube

Nginxが着信トラフィックをSonarQubeにルーティングするように、この構成を追加します。

/ etc / nginx / sites-enabled / sonarqube

server {
   listen 80;
   server_name ;

   location / {
       proxy_pass http://127.0.0.1:;
   }
}

ファイルを保存して閉じます。

次に、構成ファイルに構文エラーがないことを確認します。

sudo nginx -t

エラーが表示された場合は、それらを修正して、 `+ sudo nginx -t +`を再度実行します。 エラーがなければ、Nginxを再起動します。

sudo service nginx restart

簡単なテストのために、Webブラウザで `+ http:// +`にアクセスできます。 SonarQube Webインターフェースが表示されます。

次に、Let’s Encryptを使用してインストール用のHTTPS証明書を作成し、サーバーとローカルマシン間でデータが安全に転送されるようにします。 `+ certbot +`を使用して、Nginxの証明書を作成します。

sudo certbot --nginx -d

Let’s Encrypt証明書を初めて要求する場合、CertbotはメールアドレスとEULA契約を求めます。 電子メールを入力し、EULAに同意します。

その後、Certbotはセキュリティ設定の構成方法を尋ねます。 すべてのリクエストをHTTPSにリダイレクトするオプションを選択します。 これにより、クライアントとSonarQubeサーバー間のすべての通信が確実に暗号化されます。

リバースプロキシの設定が完了したので、SonarQubeサーバーのセキュリティ保護に進みます。

ステップ5-SonarQubeの保護

SonarQubeには、デフォルトの管理者ユーザー名とパスワード* admin *が付属しています。 このデフォルトのパスワードは安全ではないため、適切なセキュリティ対策として、より安全なパスワードに更新する必要があります。

インストールのURLにアクセスして開始し、デフォルトの資格情報を使用してログインします。 チュートリアルを開始するように求められたら、[このチュートリアルをスキップ]をクリックしてダッシュボードに移動します。

ログインしたら、[管理]タブをクリックし、ドロップダウンリストから[セキュリティ]を選択して、[ユーザー]を選択します。

image:https://assets.digitalocean.com/articles/sonarqube_1604/eUpM2OE.png [SonarQubeユーザー管理タブ]

ここから、「管理者」アカウント行の右側にある小さな歯車をクリックし、「パスワードの変更」をクリックします。 パスワードは覚えやすいが推測しにくいものに変更してください。

次に、プロジェクトを作成し、同じページからサーバーに分析結果を送信するために使用できる通常のユーザーを作成します。 ページの右上にある[ユーザーの作成]ボタンをクリックします。

次に、「トークン」列のボタンをクリックして、このトークンに名前を付けて、特定のユーザーのトークンを作成します。 後でコードスキャナーを呼び出すときにこのトークンが必要になるため、必ず安全な場所に書き留めてください。

最後に、SonarQubeインスタンスは世界に広く開かれており、誰でも分析結果とソースコードを表示できることに気付くかもしれません。 この設定は非常に安全ではないため、ログインユーザーのみがダッシュボードにアクセスできるようにSonarQubeを構成します。 同じ[管理]タブから、[構成]、[一般設定]、左ペインの[セキュリティ]の順にクリックします。 [ユーザー認証を強制する]というスイッチを切り替えて認証を有効にし、スイッチの下にある[保存]ボタンをクリックします。

image:https://assets.digitalocean.com/articles/sonarqube_1604/CJwI7pe.png [SonarQube Force認証スイッチ]

サーバーのセットアップが完了したので、SonarQubeスキャナーをセットアップしましょう。

ステップ6-コードスキャナーのセットアップ

SonarQubeのコードスキャナーは、ローカル開発ワークステーションや継続的配信サーバーなど、SonarQubeサーバーを実行しているマシンとは異なるマシンにインストールできる個別のパッケージです。 SonarQube Webサイトで見つけることができるWindows、MacOS、およびLinux用のパッケージがあります。

このチュートリアルでは、SonarQubeサーバーをホストするサーバーにコードスキャナーをインストールします。

スキャナーのディレクトリを作成することから始めます。

sudo mkdir /opt/sonarscanner

次に、そのディレクトリに移動します。

cd /opt/sonarscanner

`+ wget +`を使用してLinux用のSonarQubeスキャナーをダウンロードします。

sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/

次に、スキャナーを抽出します。

sudo unzip

次に、zipアーカイブファイルを削除します。

sudo rm

その後、スキャナーをサーバーのインストールで動作させるために、いくつかの設定を変更する必要があります。 編集のために構成ファイルを開きます。

sudo nano /conf/sonar-scanner.properties

まず、スキャナーにコード分析結果の送信先を指示します。 `+ sonar.host.url`で始まる行のコメントを解除し、SonarQubeサーバーのURLに設定します。

/opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/conf/sonar.properties

   sonar.host.url=

ファイルを保存して閉じます。 スキャナーのバイナリを実行可能にします:

sudo chmod +x /bin/sonar-scanner

次に、パスを指定せずにスキャナーを呼び出すことができるように、シンボリックリンクを作成します。

sudo ln -s /opt/sonarscanner//bin/sonar-scanner /usr/local/bin/sonar-scanner

スキャナーがセットアップされたので、最初のコードスキャンを実行する準備が整いました。

手順7-SonarQubeサンプルプロジェクトでのテストスキャンの実行

SonarQubeを使って何ができるか確認したい場合は、https://github.com/SonarSource/sonar-scanning-examples [SonarQubeサンプルプロジェクト]でテストスキャンを実行することを検討してください。 これらは、SonarQubeチームが作成したサンプルプロジェクトで、SonarQubeが検出して報告する多くの問題が含まれています。

ホームディレクトリに新しい作業ディレクトリを作成し、ディレクトリに移動します。

cd ~
mkdir sonar-test && cd sonar-test

サンプルプロジェクトをダウンロードします。

wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip

プロジェクトを解凍し、アーカイブファイルを削除します。

unzip master.zip
rm master.zip

次に、サンプルプロジェクトディレクトリに切り替えます。

cd sonar-scanning-examples-master/sonarqube-scanner

前に作成したトークンを渡して、スキャナーを実行します。

sonar-scanner -D sonar.login=

これにはしばらく時間がかかります。 スキャンが完了すると、コンソールに次のようなものが表示されます。

INFO: Task total time: 14.128 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 21.776s
INFO: Final Memory: 17M/130M
INFO: ------------------------------------------------------------------------

サンプルプロジェクトのレポートは、SonarQubeダッシュボードに次のように表示されます。

image:https://assets.digitalocean.com/articles/sonarqube_1604/xzmQXIR.png [SonarQube Dashboard]

SonarQubeサーバーとスキャナーがテストコードで動作することを確認したので、SonarQubeを使用して独自のコードを分析できます。

ステップ8-独自のコードでスキャンを実行する

SonarQubeで独自のコードを分析するには、まずプロジェクトをサーバーに転送するか、手順6に従ってワークステーションにSonarQubeスキャナーをインストールして構成し、SonarQubeサーバーを指すように構成します。

次に、プロジェクトのルートディレクトリでSonarQube構成ファイルを作成します。

nano sonar-project.properties

このファイルを使用して、SonarQubeにプロジェクトに関するいくつかのことを伝えます。

まず、プロジェクトの一意のIDである_project key_を定義します。 好きなものを使用できますが、このIDはSonarQubeインスタンスに対して一意である必要があります。

sonar-project.properties

   # Unique ID for this project
   sonar.projectKey=

   ...

次に、プロジェクト名とバージョンを指定して、SonarQubeがこの情報をダッシュ​​ボードに表示するようにします。

sonar-project.properties

   ...

   sonar.projectName=
   sonar.projectVersion=

   ...

最後に、コードファイルを探す場所をSonarQubeに伝えます。 これは、構成ファイルが存在するディレクトリに関連していることに注意してください。 現在のディレクトリに設定します。

sonar-project.properties

   # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
   sonar.sources=

ファイルを閉じて保存します。

独自のコードでコード品質分析を実行する準備が整いました。 トークンを渡して、 `+ sonar-scanner +`を再度実行します。

sonar-scanner -D sonar.login=

スキャンが完了すると、次のような概要画面が表示されます。

INFO: Task total time: 5.417 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 9.659s
INFO: Final Memory: 39M/112M
INFO: ------------------------------------------------------------------------

プロジェクトのコード品質レポートがSonarQubeダッシュボードに表示されます。

結論

このチュートリアルでは、コード品質分析のためにSonarQubeサーバーとスキャナーをセットアップしました。 これで、スキャンを実行するだけでコードを簡単に保守できるようになります-SonarQubeは潜在的な問題がどこにあるかを教えてくれます!

ここから、https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner [SonarQube Scanner documentation]を読んで、ローカル開発マシンで、またはその一部として分析を実行する方法を学ぶことができます。ビルドプロセス。