Dockerを使用してSonarQubeをインストールする詳細なチュートリアル

Dockerを使用してSonarQubeをインストールする詳細なチュートリアル

Docker を使用して SonarQube をインストールするためのチュートリアルは次のとおりです。

1. イメージをプルする

1.1 関連するイメージをプルして実行する

1.1.1 関連する画像を取得する

# sonarqube イメージをプルします $ docker pull sonarqube:9.1.0-community (推奨) / $ docker pull sonarqube:7.6-community
# postgres イメージをプルします $ docker pull postgres:9.6.23

1.1.2 イメージを実行する

# postgres データベースを実行します $ docker run --name postgresqldb --restart=always -p 5432:5432 \
-e POSTGRES_USER=ルート\
-e POSTGRES_PASSWORD=123456 \
-d ポストグレ:9.6.23

# postgresコンテナに入り、ユーザー名とパスワードを作成します $ docker exec -it postgresqldb bash

# データベースにログイン psql -U root -W
# ユーザー名とパスワードを作成します。create user sonar with password 'sonar';
データベース sonar 所有者 sonar を作成します。
データベース sonar のすべての権限を sonar に付与します。

# postgresデータベースに接続せずにコマンドを実行します(非推奨)
docker run --name sonarqube --restart=always -p 9000:9000 -d naumy/hitrend-sonarqube:v1.0

# sonarqube コンテナを実行します docker run -d --name sonarqube --restart=always \
-p 9000:9000 \
-e sonar.jdbc.username=sonar \
-e sonar.jdbc.password=ソナー \
-e sonar.jdbc.url=jdbc:postgresql://139.198.176.140:5432/sonar \
sonarqube:9.1.0-コミュニティ

次に、http://localhost:9000/ にアクセスします。デフォルトの管理者ユーザー名とパスワードはadmin/adminです。

画像-20211008222658468

組み込みデータベースは評価目的でのみ使用してください。組み込みデータベースは拡張できず、SonarQube の新しいバージョンへのアップグレードはサポートされておらず、そこから他のデータベース エンジンへのデータの移行もサポートされていません。

1.2 変更した画像を保存して送信する

# 変更したイメージを保存します docker commit -a "naumy" -m "中国語プラグインをインストール" 19f1cc24dc98 hitrend-sonarqube:v1.0
# 古いイメージの名前をリポジトリに必要な新しいバージョン名に変更します docker tag hitrend-sonarqube:v1.0 naumy/hitrend-sonarqube:v1.0
# docker hubにログイン
dockerログイン       
# プッシュ docker push naumy/hitrend-sonarqube:v1.0

画像-20211005120955961

2. インストール成功

画像-20211003205325696

3. プラグインのインストール

3.1 中国語プラグインをインストールする

SonarQube強力なプラグイン管理機能を提供します。中国語言語パックを例に、プラグインのインストール方法を説明します。

ログインに成功したら、 Administration-Marketplace-Pluginsを選択し、検索ボックスにChineseを入力してインストールを選択します。

画像-20211003205550266

ステータスにInstall Pendingと表示されたら、プラグインのインストールは完了です。有効にするには、 Restart Serverクリックします。

それ以降は中国語で表示されます。

findbugプラグインもインストールしてください

画像-20211003205917633

4. Dockerにgitlabをインストールする

4.1. Gitlabイメージをプルする

# gitlab-ce は安定バージョンです。バージョンを入力しない場合は、デフォルトで最新バージョンがプルされます。$ docker pull gitlab/gitlab-ce

4.2 GitLabイメージを実行する

$ docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

# -d: バックグラウンドで実行# -p: コンテナの内部ポートを外部にマップ# --name: コンテナに名前を付ける# -v: コンテナ内のデータフォルダまたはログ、構成、その他のフォルダをホストの指定されたディレクトリにマウントする

上記の方法によると、gitlab コンテナは正常に動作しますが、gitlab 上でプロジェクトを作成すると、生成されたプロジェクトの URL アクセス アドレスはコンテナのホスト名、つまりコンテナの ID に従って生成されます。

Gitlab サーバーとしては固定の URL アクセス アドレスが必要なので、gitlab.rb (ホスト パス: /home/gitlab/config/gitlab.rb ) を設定する必要があります。

# gitlab.rb ファイルの内容はデフォルトですべてコメントです$ vim /home/gitlab/config/gitlab.rb
# http プロトコルで使用されるアクセス アドレスを設定します。ポート番号を追加しない場合、デフォルトは 80 です。
外部URL 'http://192.168.199.231'

# SSHプロトコルで使用されるアクセスアドレスとポートを設定します gitlab_rails['gitlab_ssh_host'] = '192.168.199.231'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # このポートは実行中にポート22にマップされる222ポートです: wq # 設定ファイルを保存して終了します

画像-20211006212109889

# GitLabコンテナを再起動します $ docker restart gitlab

この時点でプロジェクトの倉庫住所は変更されています。 SSH ポート アドレスがデフォルトの 22 でない場合は、ssh:// プロトコル ヘッダーが追加されます。ブラウザを開いて IP アドレスを入力します (私の GitLab ポートは 80 なので、ブラウザの URL にポート番号を入力する必要はありません。ポート番号が 80 でない場合は、ip:ポート番号として開きます)

4.3 ルートユーザー名とパスワードを設定する

/home/gitlab/config/initial_root_passwordディレクトリに入り、パスワードを表示します。

翻訳:

または、gitlab コンテナに入った後にパスワードを変更します。

root@ba96cb6a1f47:/# gitlab-rails コンソール
--------------------------------------------------------------------------------
 Ruby: ruby​​ 2.7.4p191 (2021-07-07 リビジョン a21a3b7d23) [x86_64-linux]
 GitLab: 14.3.2 (92acfb1b8a9) フォス
 GitLab シェル: 13.21.1
 PostgreSQL: 12.7
--------------------------------------------------------------------------------

irb(main):005:0> user = User.where(id: 1).first
=> #<ユーザーID:1 @root>
irb(メイン):006:0> user.password=12345678
=> 12345678
irb(メイン):007:0> user.password_confirmation=12345678
=> 12345678
irb(main):008:0> user.save!
ActionMailer::MailDeliveryJob (ジョブ ID: 4fc2d685-2fd6-41d9-893e-2dabc7c3b366) を Sidekiq(mailers) に、引数 "DeviseMailer"、"password_change"、"deliver_now"、{:args=>[#<GlobalID:0x00007fc6c59b5b48 @uri=#<URI::GID gid://gitlab/User/1>>]} を付けてキューに追加しました
=> 本当
irb(main):009:0> 終了

画像-20211006113044081

実行後の効果図

4.4 イメージを保存してdockerhubにプッシュする

# 変更したイメージを保存します docker commit -a "naumy" -m "initialize gitlab" ba96cb6a1f47 gitlab:v1.0
docker commit -a "naumy" -m "sonarqube:7.6-community " e70c6cbe2e0b sonarqube-7.6-community:v1.0
docker タグ sonarqube-7.6-community:v1.0 naumy/sonarqube-7.6-community:v1.0
docker push naumy/sonarqube-7.6-community:v1.0
# 古いイメージの名前をリポジトリに必要な新しいバージョン名に変更します docker tag gitlab:v1.0 naumy/gitlab:v1.0
# docker hubにログイン
dockerログイン       
# プッシュ docker push naumy/gitlab:v1.0

5. 遭遇した問題

5.1 仮想メモリ不足

コンテナを起動してから10秒ほど経過しました。コンテナは自動的に終了します。

エラー: 最大仮想メモリ領域 vm.max_map_count [65530] が低すぎます。少なくとも [262144] に増やしてください。

コンテナを実行した後、コンテナはすぐに終了します。

# 実行中のログを表示するには、コマンドを使用します。docker logs コンテナ名/コンテナID 

画像-20211005110639500

/etc/sysctl.confファイルの末尾に1行追加します。

vm.max_map_count=262144

画像-20211005110922585

すぐに有効にするには/sbin/sysctl -pを実行します。

画像-20211005111046958

6. SonarとGitLabを統合する

6.1 Gitlab-runnerをインストールする

6.1.1 gitlab-Tokenを取得する

gitlab に入ったら、ランナーを選択し、対応するトークンを取得します。

画像-20211008170417198

6.1.2 gitlab-runnerをインストールする

# イメージをプルする docker pull gitlab/gitlab-runner:v13.2.4

# コンテナマッピングディレクトリを作成する mkdir -p /dwz/docker-volume/gitlab-runner/config

# コンテナを作成し、docker run -d --name gitlab-runner を実行します \
--常に再起動\
gitlab-runner のディレクトリを /etc/gitlab-runner にコピーします。
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-ランナー:v13.2.4

gitlab-runner コンテナに入ったら、対応するパラメータ設定を構成します。

docker exec -it gitlab-runner gitlab-runner register -n \
--url http://139.198.166.208 \
--登録トークン 9zEbBYXSyqJqpNb9QSNh \
--executor docker \
--description "Docker ランナー" \
--docker-image "sonarsource/sonar-scanner-cli:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock

gitlab ページを再度読み込むと、ランナー構成項目が表示されます。

画像-20211008170819704

6.2 sonarqubeのユーザー名とパスワードを設定する

現在のsonarqubeユーザーインターフェースとパスワードをadminと123456に設定します

6.3 プロジェクト分析を実行する(手動でプロジェクトを追加する)

画像-20211006200645346

お気に入りの CI を統合し、継続的インテグレーションと継続的デプロイメントに GitLab を使用する必要がありますか?

画像-20211009183044360

最初のステップは、検出する必要があるプロジェクト コード タイプを選択することです。

画像-20211009183751728

新しい設定ファイル sonar-project.properties を作成します。

sonar.projectKey=gitlab-sonorqube
ソナー品質ゲート待機=true
ソナー言語 = py

画像-20211009183240599

ステップ2: 環境変数を追加する

画像-20211009183832036

画像-20211006202645805

トークンキー: b23fe46d142fcfb052b05d5b3fd6fc823df0b682

必要に応じて対応する環境変数を追加します。

画像-20211009163010867

6.4 CI/CD を実行する (sonar と gitlab)

バージョン6.4.1はsonarqube-7.6-communityです

GitLab プロジェクトを作成します。実験で使用するプロジェクトは Python プロジェクトです。

画像-20211008171646440

.gitlab-ci.ymlファイルの内容は

# このファイルはテンプレートであり、プロジェクトで動作させる前に編集する必要がある場合があります。
# CI/CD テンプレートの改善に貢献するには、次の開発ガイドに従ってください。
# https://docs.gitlab.com/ee/development/cicd/templates.html
# この特定のテンプレートは次の場所にあります:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml

# これは、変更せずに実行できるサンプルの GitLab CI/CD 構成ファイルです。
# 基本的な3段階のCI/CDパイプラインを示します。実際のテストやスクリプトの代わりに、
# echo コマンドを使用してパイプラインの実行をシミュレートします。
#
# パイプラインは、スクリプトを実行する独立したジョブで構成され、ステージにグループ化されます。
# ステージは順番に実行されますが、ステージ内のジョブは並行して実行されます。
#
# 詳細については、https://docs.gitlab.com/ee/ci/yaml/index.html#stages を参照してください。

stages: # ジョブのステージのリストと実行順序
  - 建てる
  - テスト
  - 展開する

build-job: # このジョブは、最初に実行されるビルド ステージで実行されます。
  ステージ: ビルド
  スクリプト:
    - echo "コードをコンパイルしています..."
    - echo "コンパイルが完了しました。"

unit-test-job: # このジョブはテスト段階で実行されます。
  stage: test # ビルド ステージのジョブが正常に完了した場合にのみ開始されます。
  スクリプト:
    - echo "ユニットテストを実行しています...これには約 60 秒かかります。"
    - 睡眠60
    - echo "コードカバレッジは90%です"

lint-test-job: # このジョブもテスト段階で実行されます。
  stage: test # unit-test-job と同時に(並行して)実行できます。
  スクリプト:
    - echo "コードをリンティングしています...これには約 10 秒かかります。"
    - 睡眠10
    - echo "lint の問題は見つかりませんでした。"

deploy-job: # このジョブはデプロイ段階で実行されます。
  stage: deploy # テスト ステージの両方のジョブが正常に完了した場合にのみ実行されます。
  スクリプト:
    - echo "アプリケーションをデプロイしています..."
    - echo "アプリケーションが正常にデプロイされました。"
    
画像: 
  名前: sonarsource/sonar-scanner-cli:latest
  エントリポイント: [""]

ソナーキューブチェック:
  スクリプト: 
    - sonar-scanner -X -Dsonar.projectKey=gitlab-sonorqube -Dsonar.host.url=http://139.198.176.140:9000 -Dsonar.login=cbd26f998beeb61d7a991e0282efc430b020d9f1 -Dsonar.login=admin -Dsonar.password=admin -Dsonar.language=py -Dsonar.java.binaries=build/ -Dsonar.projectVersion=1.0 -Dsonar.sources=. 
  失敗を許可する: true
  のみ:
    - main # またはメインブランチの名前

コードを送信すると、対応するテスト情報を取得できます。

https://sm.ms/image/ykYPlDgZVvuhzsq

バージョン6.4.2はsonarqube-9.1-communityです

.gitlab-ci.ymlファイルの内容は

ソナーキューブチェック:
  画像: 
    名前: sonarsource/sonar-scanner-cli:latest
    エントリポイント: [""]
  変数:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # 分析タスクキャッシュの場所を定義します
    GIT_DEPTH: "0" # 分析タスクに必要なプロジェクトのすべてのブランチを取得するようにgitに指示します
  キャッシュ:
    キー: "${CI_JOB_NAME}"
    パス:
      - .sonar/キャッシュ
  スクリプト: 
    - sonar-scanner -X -Dsonar.projectKey=gitlab-sonorqube -Dsonar.host.url=http://139.198.176.140:9000 -Dsonar.login=7f9e3408ac11e0699e2f8afdb21a662cc8ab2698 -Dsonar.login=admin -Dsonar.password=123456 -Dsonar.language=py -Dsonar.java.binaries=build/ -Dsonar.projectVersion=1.0 -Dsonar.sources=. 
  失敗を許可する: true
  のみ:
    - main # またはメインブランチの名前

コードを送信すると、gitlab は自動的に CI/CD を実行します。

画像-20211009174921078

クリックして、対応するステータスとコンテンツが要件を満たしているかどうかを確認します。

画像-20211009174902725

実行が完了すると、対応するテスト分析結果が表示されます。

画像-20211009163521482

6.5 統合プロセス中に発生した問題

設定ファイルが正しくありません:

Python コードが使用されているため、将来的には言語の選択肢として py が使用されます。

画像-20211009190159197

画像-20211009190324553

7. まとめ

現在使用されているツールは次のとおりです。

sonarqube:9.1.0-community、gitlab/gitlab-runner:v13.2.4、postgres:9.6.23、gitlab/gitlab-ce、sonarsource/sonar-scanner-cli:latest

画像-20211009163631709

開発者がコードを GitLab リポジトリに送信すると、マスター ブランチの自動マージ タスクがトリガーされ、コードがスキャンされ (他のテスト ブランチに変更可能)、スキャン結果が sonarqube プラットフォームに返されます。

画像-20211009175746382

これで、SonarQube を Docker でインストールする方法についての記事は終了です。SonarQube を Docker でインストールする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker を使って sonarqube を構築する方法
  • Dockerはコード検出プラットフォームSonarQubeを構築し、Mavenプロジェクトのプロセスを検出します

<<:  Adobe Brackets の簡単な使い方のグラフィックチュートリアル

>>:  Mysql の主キー インデックスと非主キー インデックスの違いについて簡単に説明します。

推薦する

CentOS 8/RHEL 8 に Cockpit をインストールして使用する方法

Cockpit は、CentOS および RHEL システムで使用できる Web ベースのサーバー管...

vue-router 履歴モード サーバー側設定プロセス記録

歴史ルート履歴モードとは、HTML5 の履歴 API を使用してクライアント側ルーティングを実装する...

CSSのoutline-offsetプロパティを使用してプラス記号を実装する

次のような初期コードがあると仮定します。 <!DOCTYPE html> <htm...

vue router-view のネストされた表示実装

目次1. ルーティング構成2. Vueページのネスト3. ネストされた関係1. ルーティング構成 定...

vsftp を使用して Linux で FTP サーバーを構築する (パラメータの説明付き)

導入この章では、主に Linux で FTP サーバーを構築するプロセスを紹介します。習得すべき重要...

MySQL Truncate の使用方法の詳細な説明

目次MySQL 切り捨ての使用1. 構文を切り捨てる2. Truncateの使用上の注意3. TRU...

Vueカスタムカプセル化ボタンコンポーネント

Vueボタンコンポーネントのカスタムカプセル化コードは参考用です。具体的な内容は次のとおりです。ボタ...

js オブザーバーモードの紹介と使用

目次定義2. 使用シナリオ3. 例を挙げる4. コーディング定義オブザーバー パターンは 1 対多の...

Windows システムで MySQL が起動しない場合の一般的な解決策

MySQL 起動エラーWindows 10 に MySQL をインストールする前は、net star...

VMware マルチノード環境を構成する方法

このチュートリアルでは CentOS 7 64 ビットを使用します。各仮想マシンに 2GB のメモリ...

MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....

MySQLクエリ最適化プロセスを理解する

目次パーサーとプリプロセッサクエリオプティマイザーMySQL クエリの最適化には、解析、前処理、最適...

クラスタrpmを使用してMySQLをインストールするための詳細な手順

MySQLデータベースをインストールするa) MySQL ソースインストールパッケージをダウンロード...

Centos7 への mysql8.0rpm のインストール チュートリアル

まず、図をダウンロードしてください 1. まず、centos7に付属しているmariadbをアンイン...

vue+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...