banner
云野阁

云野阁

闲云野鹤,八方逍遥

dockerでSonarQubeをデプロイする

前言#

🔜SonarQubeとは?🔚

SonarQube はオープンソースのコード品質管理プラットフォームで、一連のルールライブラリを通じてコードをスキャンし、品質を向上させます。

SonarQube サーバーの分析を実行するには、3 つのコンポーネントが必要です:SonarQube Server、ストレージデータベース(この記事では PostgreSQL を使用)、scanners スキャンプログラム。

その中で UI はSonarQube Server :Web インターフェースを提供し、コード分析レポートを処理し、ストレージデータベースに保存する計算エンジンです(SonarQube Server には Elasticsearch も統合されています)。

ストレージデータベース :SonarQube Server の設定;コードスキャン中に生成されるコード品質とセキュリティ指標および問題。

 scanners スキャンプログラム:プロジェクトを分析するために使用され、言語によって異なります。

環境準備#

(1)スクリプトを使用して docker、docker-compose をインストール

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

(2)イメージの加速を設定

vi /etc/docker/daemon.json

{
  "data-root": "/data/dockerData",
  "registry-mirrors": [
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
    "https://docker.kubesre.xyz"],
    "log-driver":"json-file",
    "log-opts":{"max-size" :"50m","max-file":"3"}
}

(3)docker サービスを起動

systemctl start docker
systemctl enable docker
systemctl status docker

(4)プロセスが持つ可能性のある最大メモリマッピング領域数(vm.max_map_count)を 524288 以上に設定し、オープンファイル記述子の最大数(fs.file-max)を 131072 以上に設定します。

echo "vm.max_map_count=524288
fs.file-max=131072" >> /etc/sysctl.conf
sysctl -p

(5)セキュリティポリシーを設定

firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

SonarQube のデプロイ#

(1)必要なディレクトリを作成

mkdir -p /data/sonarqube/data /data/sonarqube/extensions /data/sonarqube/logs /data/sonarqube/temp
chmod -R 777 /data/sonarqube/
mkdir -p /data/sonarqube/sonarqube-sql /data/sonarqube/sonarqube-sql/data

(2)docker compose ファイルを作成し、SonarQube とデータベースコンテナを編成します。

vi sonarqube.yml
*****************************************************
services:
  sonarqube:
    image: sonarqube:community
    container_name: sonarqube
    restart: always
    volumes:
      - /data/sonarqube/data:/opt/sonarqube/data
      - /data/sonarqube/extensions:/opt/sonarqube/extensions
      - /data/sonarqube/logs:/opt/sonarqube/logs
      - /data/sonarqube/temp:/opt/sonarqube/temp
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://sonarqube-sql:5432/postgres
      SONAR_JDBC_USERNAME: postgres
      SONAR_JDBC_PASSWORD: Qwer#1234
    ports:
      - "9000:9000"
    depends_on:
      sonarqube-sql:
        condition: service_healthy
    networks:
      net:
        ipv4_address: 172.20.112.11
  sonarqube-sql:
    image: postgres:15
    hostname: postgresql
    container_name: sonarqube-sql
    restart: always
    volumes:
      - /data/sonarqube/sonarqube-sql:/var/lib/postgresql
      - /data/sonarqube/sonarqube-sql/data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
      POSTGRES_PASSWORD: Qwer#1234
      TZ: "Asia/Shanghai"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      net:
        ipv4_address: 172.20.112.12


networks:
 net:
  driver: bridge
  ipam:
   config:
    - subnet: 172.20.112.0/24
*****************************************************

(3)コマンドを実行してコンテナを作成

docker compose -f sonarqube.yml up -d

SonarScanner のデプロイ VUE 統合#

(1)VUE プロジェクトのルートディレクトリに sonar-project.properties ファイルを作成し、設定項目を追加

vi sonar-project.properties
*****************************************************
sonar.projectKey=sonarqubeで作成したプロジェクト名
sonar.projectName=VUEプロジェクト名
sonar.projectVersion=VUEプロジェクトバージョン
sonar.sources=.  #VUEプロジェクトのソースファイルのディレクトリ
sonar.language=vue   #プロジェクト言語
sonar.sourceEncoding=UTF-8  #プロジェクトエンコーディング
sonar.host.url=http://192.168.32.12:9000/ #sonarqubeサーバーのアドレス
sonar.token=sonarqubeで作成したプロジェクトのトークン
*****************************************************
#ファイル権限を変更
chmod -R 777 sonar-project.properties

(2)SonarScanner コンテナを作成してプロジェクトコードをスキャン

 docker run  --rm \
 -v "/home/code/vue-test:/usr/src"  \
 sonarsource/sonar-scanner-cli

プロジェクトコードの量によって時間が異なる場合があります。以下はスキャン完了後のメッセージです。

09:13:23.107 WARN  このことは SonarQube の機能が欠落または破損する原因となる可能性があります

09:13:23.324 INFO  CPD Executor 61 ファイルには CPD ブロックがありませんでした

09:13:23.325 INFO  CPD Executor 325 ファイルの CPD を計算中

09:13:23.634 INFO  CPD Executor CPD 計算が完了しました(完了)| time=309ms

09:13:23.641 INFO  SCM リビジョン ID '4941a614714697243a5a8f7824fc921ff5f84345'

09:13:24.131 INFO  分析レポートが 462ms で生成され、ディレクトリサイズは 18.8 MB です

09:13:25.560 INFO  分析レポートが 1429ms で圧縮され、zip サイズは 8.3 MB です

09:14:10.518 INFO  分析レポートが 44955ms でアップロードされました

09:14:10.519 INFO  分析成功、結果は次の場所で見つけることができます: http://192.168.32.12:9000/dashboard?id=test4

09:14:10.519 INFO  サーバーが提出された分析レポートを処理した後、更新されたダッシュボードにアクセスできるようになります

09:14:10.519 INFO  レポート処理の詳細については、http://192.168.32.12:9000/api/ce/task?id=acfc4bc2-7b20-4166-bde6-93d970ac62b3をご覧ください

09:14:10.601 INFO  分析の総時間: 3:49.166 s

09:14:10.602 INFO  SonarScanner エンジンが正常に完了しました

09:14:10.636 INFO  実行成功

09:14:10.637 INFO  総時間: 17:51.245s

SonarScanner のデプロイ PHP 統合#

(1)PHP プロジェクトのルートディレクトリに sonar-project.properties ファイルを作成し、設定項目を追加

vi sonar-project.properties
*****************************************************
sonar.projectKey=sonarqubeで作成したプロジェクト名
sonar.projectName=PHPプロジェクト名
sonar.projectVersion=PHPプロジェクトバージョン
sonar.sources=.  #PHPプロジェクトのソースファイルのディレクトリ
sonar.language=php   #プロジェクト言語
sonar.sourceEncoding=UTF-8  #プロジェクトエンコーディング
sonar.host.url=http://192.168.32.12:9000/ #sonarqubeサーバーのアドレス
sonar.token=sonarqubeで作成したプロジェクトのトークン
*****************************************************
#ファイル権限を変更
chmod -R 777 sonar-project.properties

(2)SonarScanner コンテナを作成してプロジェクトコードをスキャン

 docker run  --rm \
 -v "/home/code/php-test:/usr/src"  \
 sonarsource/sonar-scanner-cli

プロジェクトコードの量によって時間が異なる場合があります。以下はスキャン完了後のメッセージです。

09:13:23.107 WARN  このことは SonarQube の機能が欠落または破損する原因となる可能性があります

09:13:23.324 INFO  CPD Executor 61 ファイルには CPD ブロックがありませんでした

09:13:23.325 INFO  CPD Executor 325 ファイルの CPD を計算中

09:13:23.634 INFO  CPD Executor CPD 計算が完了しました(完了)| time=309ms

09:13:23.641 INFO  SCM リビジョン ID '4941a614714697243a5a8f7824fc921ff5f84345'

09:13:24.131 INFO  分析レポートが 462ms で生成され、ディレクトリサイズは 18.8 MB です

09:13:25.560 INFO  分析レポートが 1429ms で圧縮され、zip サイズは 8.3 MB です

09:14:10.518 INFO  分析レポートが 44955ms でアップロードされました

09:14:10.519 INFO  分析成功、結果は次の場所で見つけることができます: http://192.168.32.12:9000/dashboard?id=test4

09:14:10.519 INFO  サーバーが提出された分析レポートを処理した後、更新されたダッシュボードにアクセスできるようになります

09:14:10.519 INFO  レポート処理の詳細については、http://192.168.32.12:9000/api/ce/task?id=acfc4bc2-7b20-4166-bde6-93d970ac62b3をご覧ください

09:14:10.601 INFO  分析の総時間: 3:49.166 s

09:14:10.602 INFO  SonarScanner エンジンが正常に完了しました

09:14:10.636 INFO  実行成功

09:14:10.637 INFO  総時間: 17:51.245s

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。