SonarQubeコンテナを起動したあとに、各種プラグインをセットアップしようとしたのですが、Proxy認証がうまくいってないみたいでプラグインのインストールができません。
対応に結構ハマったのでやり方を残しておきます。
動作環境
以下の環境下で動作確認しています。
- Docker
- 17.12.0-ce
- Docker Compose
- 1.18.0
- SonarQube
- 7.0 / 6.6
前提
SonarQube公式イメージのDockerfileを見ていると、openjdk:8がベースになっていることが分かります。
Java8の変更点を見てみると以下のように記されています。
抜粋
HTTPSトンネリングのBasic認証の無効化
一部の環境で、HTTPSプロキシ時に特定の認証スキームが不適切である場合があります。
そのため、Basic認証スキームは、デフォルトではOracle Java Runtimeでjdk.http.auth.tunneling.disabledSchemes
ネットワーク・プロパティにBasicを追加することで非アクティブ化されています。
HTTPSのトンネルの設定時にBasic認証を必要とするプロキシは、デフォルトでは成功しないようになりました。
必要な場合、jdk.http.auth.tunneling.disabledSchemesネットワーク・プロパティからBasicを削除するか、
コマンド行で同じ名前のシステム・プロパティを"" (空)に設定することで、この認証スキームを再度アクティブ化できます。
また、jdk.http.auth.tunneling.disabledSchemesおよびjdk.http.auth.proxying.disabledSchemes
ネットワーク・プロパティと同じ名前のシステム・プロパティは、
それぞれHTTPSのトンネルの設定時またはプレーンなHTTPのプロキシ時に、
アクティブ化されている可能性があるその他の認証スキームを無効化するために使用できます。JDK-8160838 (非公開)
なるほど。と思い、SonarQubeコンテナ起動時のオプションに「-Djdk.http.auth.tunneling.disabledSchemes=""」を付けて起動してみました。が、うまくProxy認証してくれません。別のやり方を模索しました。
イメージビルド
- Dockerファイルを作ります。
/etc/java-8-openjdk/net.propertiesの「jdk.http.auth.tunneling.disabledSchemes=Basic」パラメータをコメントアウトしていることがポイントです。
ProxyHost等の各種パラメータ値は環境に合わせて修正してください。
Dockerfile
FROM sonarqube:7.0
ARG PASSWORD
# for Proxy Basic Authentication
RUN sed -i -e "s/jdk.http.auth.tunneling.disabledSchemes=Basic/#jdk.http.auth.tunneling.disabledSchemes=Basic/g" /etc/java-8-openjdk/net.properties
RUN sed -i -e "s/#http.proxyHost=/http.proxyHost=[YOUR Proxy IP]/g" /opt/sonarqube/conf/sonar.properties
RUN sed -i -e "s/#http.proxyPort=/http.proxyPort=[YOUR Proxy Port]/g" /opt/sonarqube/conf/sonar.properties
RUN sed -i -e "s/#http.proxyUser=/http.proxyUser=[YOUR Proxy User]/g" /opt/sonarqube/conf/sonar.properties
RUN sed -i -e "s/#http.proxyPassword=/http.proxyPassword=$PASSWORD/g" /opt/sonarqube/conf/sonar.properties
- ビルドします。このとき指定するパスワードはProxy認証用のものを指定してください。
docker build -f ./Dockerfile -t sonarqube:7.0-1.0 --build-arg PASSWORD=[YOUR PASSWORD] .
コンテナ起動
- 以下のようなcomposeファイルを作ります。データ永続化はしてないので必要に応じて修正を加えてください。
docker-compose.yml
version: '3'
services:
test_sonarqube:
image: sonarqube:7.0-1.0
ports:
- 9000:9000
depends_on:
- test_sq_mysql
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- SONARQUBE_JDBC_URL=jdbc:mysql://test_sq_mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
test_sq_mysql:
image: mysql:5.7.21
command:
mysqld
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max_allowed_packet=64MB
environment:
- MYSQL_DATABASE=sonar
- MYSQL_USER=sonar
- MYSQL_ROOT_PASSWORD=sonar
- MYSQL_PASSWORD=sonar