Help us understand the problem. What is going on with this article?

SonarQubeコンテナを7.1-alpineから7.5-communityに移行した話

More than 1 year has passed since last update.

Alpineベースのビルドは現在サポートされていない

SonarQubeでJava 11を解析するにあたってサポート状況等々を調べていたところ、
Alpineベースのイメージが SonarQube 7.1 以降提供されていないことに気づきました。

このあたりにコメントがありました。
https://github.com/SonarSource/docker-sonarqube/issues/182#issuecomment-443990870
https://github.com/SonarSource/docker-sonarqube/issues/191#issuecomment-443145321

  • we don't support Alpine-based builds. As of today, OpenJDK 8 does not officially support Alpine.
  • We don't officially support these images (they won't be listed on the hub), because OpenJDK on Alpine is not officially supported,

そのためsonarqube:7.1-alpine から sonarqube:7.5-community への移行を行ったのですが、
そもそものベースイメージを変えたり、SonarQube自体にもアップデートが数多く入っていますので
気になった変更点や手順などをまとめておきます。

7.1→7.5 における新機能や重大な変更点等

個人的に気になった箇所をあげます。その他の詳細は以下から参照できます。

Release Upgrade Notes
https://docs.sonarqube.org/latest/setup/upgrade-notes/

Community Editionで解析可能な言語が増加

  • 7.2で Goをサポート
  • 7.3で CSS、Kotlin をサポート
  • 7.4で Ruby をサポート& VB.NET がCommunity Editionで利用可能に
  • 7.5で Scalaをサポート

ちなみに7.5から Apex がEnterprise Edition 以上で利用可能になっています。

SonarQube 7.4

sonar.jdbc.url = jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema

# これまではDBユーザーに search_pathプロパティを設定する必要があったが不要に
psql> ALTER USER mySonarUser SET search_path to mySonarQubeSchema

SonarQube 7.3

SonarQube 7.2

このあたりの大幅な変更を受けてか、7.2および7.3のDockerイメージは提供されていない。
https://community.sonarsource.com/t/sonarqube-7-2-released/302

There’s no Docker image (on purpose, we didn’t forget!) for this version.

参考手順

ベースイメージの変更や、7.2おけるプラグイン周りの変更、小規模利用であること等々を鑑みて
今回はバックアップ取得後に思い切ってボリュームは再作成しました。
分析済みのデータはデータベースに保管されているので、
データベースバージョンの互換が保てていれば問題ないかなと思います。

公式のアップグレードガイドの記載内容も事前に確認しておきます。

Upgrade the Server
https://docs.sonarqube.org/latest/setup/upgrading/

特にデフォルト以外のプラグインを利用している場合は、Plugin Version Matrixを参照し、
SonarQube 7.5と互換性のあるバージョンを利用する必要があります。
単純に古いバージョンのコンテナからプラグインをコピーしてしまうと、互換性の問題や
プラグインの重複によってSonarQubeが正常に起動しない可能性があります。

Plugin Version Matrix
https://docs.sonarqube.org/display/PLUG/Plugin+Version+Matrix

コンテナの再作成

# docker-composeで複数コンテナを起動している場合、SonarQubeコンテナだけを停止し、
# コンテナ削除、ボリューム削除の順に実施
docker-compose stop sonarqube
docker rm -v sonar
docker volume rm sq_bundled-plugins sq_conf sq_data sq_extensions
# 更新済みのdocker-compose.ymlでSonarQubeコンテナの再作成
docker-compose up -d

実際よりはかなり端折っていますが、compose-fileは以下のようなイメージです。
AD連携やコンテキストパスの変更が不要であればrun.shのオプションは不要です。

docker-compose.yml
version: '3.7'

services:
  sonarqube:
    image: sonarqube:7.5-community
    container_name: sonar
    environment:
      - SONARQUBE_JDBC_USERNAME=user
      - SONARQUBE_JDBC_URL=jdbc:postgresql://db_hostname:port/sonar?currentSchema=my_schema
      - SONARQUBE_JDBC_PASSWORD=mypassword
    volumes:
      - sq_conf:/opt/sonarqube/conf
      - sq_data:/opt/sonarqube/data
      - sq_extensions:/opt/sonarqube/extensions
      - sq_logs:/opt/sonarqube/logs
    command: >
      bash -c 
      "./bin/run.sh 
      -Dsonar.security.realm=LDAP 
      -Dldap.url=$$LDAP_HOST 
      -Dldap.bindDn=$$LDAP_BIND_DN 
      -Dldap.bindPassword=$$LDAP_BIND_PASSWORD 
      -Dldap.user.baseDn=$$LDAP_USER_BASE_DN 
      -Dldap.user.request=$$LDAP_USER_REQUEST 
      -Dldap.user.realNameAttribute=displayname 
      -Dldap.user.emailAttribute=mail
      -Dsonar.web.context=/sonarqube"

networks:
  my_network:
    external: true

volumes:
  sq_conf:
  sq_data:
  sq_extensions:
  sq_logs:

データベースのマイグレーション

新しいSonarQubeコンテナを起動したら、
http://yourSonarQubeServerURL/setup
にアクセスし、画面の指示に従ってDBのマイグレーションを実行します。
1-Clickで完了しますが、念の為作業前にバックアップを取得すべきです。
その後、必要に応じてインデックス再構築などDB側のメンテナンスも実施します。

※備考: SonarQube の Java 11 対応状況について

別記事にまとめました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away