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
-
PostgreSQLで任意のスキーマを指定可能に
- sonar.jdbc.url で currentSchema パラメータ使用して指定することができるようになった
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
-
PostgreSQL 9.3未満がサポート対象外に
- PostgreSQL 9.3 未満に接続しようとすると、SonarQubeが起動しないため、注意が必要
SonarQube 7.2
-
Security Analysis
- Java/C# で各種Injectionの検知が可能(有償エディションのみ)
-
Analysis of Pull Requests
- プルリクエストコードに対する分析、GHE/TFSとの統合(有償エディションのみ)
-
パッケージ配布方法の変更
- 各エディション毎にパッケージが配布されるようになった
- アップグレードが簡単になった一方で、Marketplaceからのエディション変更が不可に
- 各エディション毎にパッケージが配布されるようになった
-
バンドルプラグインの配置パス変更
- バンドルプラグインは /opt/sonarqube/extensions/plugins に配置されるように
- 変更前の/opt/sonarqube/lib/bundled-plugins をDocker Volume化していた場合は不要になる
- 関連して、LDAPプラグインもバンドル されるようになったのが地味に嬉しい
- バンドルプラグインは /opt/sonarqube/extensions/plugins に配置されるように
このあたりの大幅な変更を受けてか、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のオプションは不要です。
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側のメンテナンスも実施します。