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 の主キー インデックスと非主キー インデックスの違いについて簡単に説明します。

推薦する

docker redis5.0 clusterの実装 クラスタ構築

システム環境: Ubuntu 16.04LTSこの記事では、6 つの Docker コンテナを使用し...

16 の XHTML1.0 と HTML の互換性ガイドラインの概要

1.ページを XML タイプとして宣言しないでください。ページでは UTF-8 または UTF-16...

MySQL データベースのステートメント ワイルドカード ファジー クエリの概要

MySQL エラー: パラメータ インデックスが範囲外です (1 > パラメータ数、つまり 0...

CentOs でノード バージョンを手動でアップグレードする方法

1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...

モバイル アプリのユーザー インターフェース設計に関する 10 のヒント

ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...

MySQLの認証コマンドgrantの使い方

この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...

TomcatのmaxPostSize属性を設定する際に注意する必要がある問題を解決する

必要:近い将来、大容量ファイルのアップロード機能を実装します。フロントエンドフレームワークのアップロ...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...

Iframe の使用を減らすべきいくつかの理由の分析

次のグラフは、100 個の異なる要素で iframe を作成するのにどれくらいの時間がかかるかを示し...

JavaScript クラス配列の詳細な理解

js 配列はどこでも使用されているため、おそらく誰もがよく知っているでしょうが、配列クラス (疑似配...

MySQLにおけるACIDトランザクションの実装原理の詳細な説明

導入いつものように、シーンから始めましょう〜インタビュアー:「トランザクションの4つの特性をご存知で...

mysql 8.0.18 mgr のインストールと切り替え機能

1. システムインストールパッケージ yum -y インストール make gcc-c++ cmak...

Ubuntu 16.04/18.04 に Pycharm と Ipython をインストールするチュートリアル

Ubuntu 18.04の場合1. sudo apt install python 。コマンドライン...

Alpine イメージに Ansible サービスを追加する方法

apk add ansible を使用して、alpine イメージに ansible サービスを追加...

MySQL 圧縮パッケージ版 zip インストール設定方法

圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...