LoginSignup
2
2

More than 5 years have passed since last update.

SonarQubeコンテナを認証付きProxy下で動かす

Last updated at Posted at 2018-03-12

SonarQubeコンテナを起動したあとに、各種プラグインをセットアップしようとしたのですが、Proxy認証がうまくいってないみたいでプラグインのインストールができません。
対応に結構ハマったのでやり方を残しておきます。

動作環境

以下の環境下で動作確認しています。

  • Docker
    • 17.12.0-ce
  • Docker Compose
    • 1.18.0
  • SonarQube
    • 7.0 / 6.6

前提

SonarQube公式イメージのDockerfileを見ていると、openjdk:8がベースになっていることが分かります。
Java8の変更点を見てみると以下のように記されています。

Java 8リリースのハイライト

抜粋
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

動作確認

  • SonarQubeにログインしてUpdate Centerを見てみると、プラグインが一覧表示されインストール可能になりました。 image.png
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2