序章

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

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

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

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

前提条件

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

  • このUbuntu18.04 の初期サーバー設定に従って、3GB以上のメモリを備えた1台のUbuntu18.04サーバー(sudo非rootユーザーとファイアウォールを含む)。
  • サーバーにインストールされたOracleJava8は、このOracleJDKインストールチュートリアルのOracleJDKセクションに従って構成されます。
  • このLEMPインストールガイドのNginxおよびMySQLセクションに従って構成されたNginxおよびMySQL。
  • Ubuntu 18.04でLet’sEncryptを使用してNginxを保護する方法に従って構成されたCertbot(Let’s Encryptクライアント)。
  • 完全修飾ドメイン名と、SonarQubeをインストールするサーバーを指すAレコード。 DigitalOceanのDNSサービスを使用している場合は、このDNSレコード設定ガイドがその設定に役立ちます。 使用します sonarqube.example.com このチュートリアルでは。

ステップ1—インストールの準備

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

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

  1. sudo adduser --system --no-create-home --group --disabled-login sonarqube

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

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

  1. sudo mkdir /opt/sonarqube

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

  1. sudo apt-get install unzip

次に、SonarQubeが使用するデータベースとクレデンシャルを作成します。 rootユーザーとしてMySQLサーバーにログインします。

  1. sudo mysql -u root -p

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

  1. CREATE DATABASE sonarqube;

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

  1. CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password';

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

  1. GRANT ALL ON sonarqube.* to sonarqube@'localhost';

次に、権限の変更を適用して、MySQLコンソールを終了します。

  1. FLUSH PRIVILEGES;
  2. EXIT;

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

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

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

  1. cd /opt/sonarqube

次に、 SonarQubeダウンロードページにアクセスし、SonarQube 7.5CommunityEditionのダウンロードリンクを入手します。 このページからダウンロードできるSonarQubeのバージョンとフレーバーは多数ありますが、この特定のチュートリアルでは、SonarQube 7.5CommunityEditionを使用します。

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

  1. sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip

ファイルを解凍します。

  1. sudo unzip sonarqube-7.5.zip

ファイルが抽出されたら、ダウンロードしたzipファイルを削除します。不要になったため、次のようにします。

  1. sudo rm sonarqube-7.5.zip

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

  1. sudo chown -R sonarqube:sonarqube /opt/sonarqube

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

ステップ3—SonarQubeサーバーの設定

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

  • SonarQubeサーバーがデータベース接続に使用するユーザー名とパスワードを指定する必要があります。
  • また、バックエンドデータベースにMySQLを使用するようにSonarQubeに指示する必要があります。
  • SonarQubeにサーバーモードで実行するように指示します。これにより、パフォーマンスが向上します。
  • また、リバースプロキシを使用するため、SonarQubeにローカルネットワークアドレスのみをリッスンするように指示します。

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

  1. sudo nano sonarqube-7.5/conf/sonar.properties

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

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

    ...

    sonar.jdbc.username=sonarqube
    sonar.jdbc.password=some_secure_password

    ...

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

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

    ...

    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?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=-server
    sonar.web.host=127.0.0.1


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

次に、 Systemd を使用して、再起動時に自動的に起動するようにSonarQubeをサービスとして実行するように構成します。

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

  1. 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/sonarqube-7.5/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh stop

User=sonarqube
Group=sonarqube
Restart=always

[Install]
WantedBy=multi-user.target

systemdユニットファイルの詳細については、Systemdユニットとユニットファイルについてをご覧ください。

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

  1. sudo service sonarqube start

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

  1. service sonarqube status

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

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

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

  1. sudo systemctl enable sonarqube

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

  1. curl http://127.0.0.1:9000

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

ステップ4—リバースプロキシの設定

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

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

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

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

/ etc / nginx / sites-enabled / sonarqube

server {
    listen 80;
    server_name sonarqube.example.com;

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

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

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

  1. sudo nginx -t

エラーが表示された場合は、修正して実行してください sudo nginx -t また。 エラーがなくなったら、Nginxを再起動します。

  1. sudo service nginx restart

簡単なテストのために、あなたは今訪問することができます http://sonarqube.example.com Webブラウザで。 SonarQubeWebインターフェイスが表示されます。

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

  1. sudo certbot --nginx -d sonarqube.example.com

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

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

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

ステップ5—SonarQubeを保護する

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

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

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

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

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

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

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

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

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

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

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

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

  1. sudo mkdir /opt/sonarscanner

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

  1. cd /opt/sonarscanner

Linux用のSonarQubeスキャナーを使用してダウンロードする wget:

  1. sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip

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

  1. sudo unzip sonar-scanner-cli-3.2.0.1227-linux.zip

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

  1. sudo rm sonar-scanner-cli-3.2.0.1227-linux.zip

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

  1. sudo nano sonar-scanner-3.2.0.1227-linux/conf/sonar-scanner.properties

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

/opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/conf/sonar.properties
    sonar.host.url=https://sonarqube.example.com

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

  1. sudo chmod +x sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner

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

  1. sudo ln -s /opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner

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

ステップ7—SonarQubeサンプルプロジェクトでテストスキャンを実行する

SonarQubeで何ができるかを確認したい場合は、SonarQubeサンプルプロジェクトでテストスキャンを実行することを検討してください。 これらは、SonarQubeチームによって作成されたサンプルプロジェクトであり、SonarQubeが検出して報告する多くの問題が含まれています。

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

  1. cd ~
  2. mkdir sonar-test && cd sonar-test

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

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

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

  1. unzip master.zip
  2. rm master.zip

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

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

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

  1. sonar-scanner -D sonar.login=your_token_here

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

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

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

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

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

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

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

  1. nano sonar-project.properties

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

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

sonar-project.properties

    # Unique ID for this project
    sonar.projectKey=foobar:hello-world

    ...

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

sonar-project.properties

    ...

    sonar.projectName=Hello World Project
    sonar.projectVersion=1.0

    ...

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

sonar-project.properties

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

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

これで、独自のコードでコード品質分析を実行する準備が整いました。 走る sonar-scanner 繰り返しますが、トークンを渡します。

  1. sonar-scanner -D sonar.login=your_token_here

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

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は、潜在的な問題がどこにあるかを教えてくれます!

ここから、 SonarQubeスキャナーのドキュメントを読んで、ローカル開発マシンで、またはビルドプロセスの一部として分析を実行する方法を学ぶことができます。