対象
OS は CentOS 7.5.1804 を使用。
~# cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
Java は yum でインストールした OpenJDK 11 を使用。
~# java -version
openjdk version "11.0.4" 2019-07-16 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.4+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.4+11-LTS, mixed mode, sharing)
Jenkins は yum でインストールした 2.190.1 を使用。
~# yum info jenkins
インストール済みパッケージ
名前 : jenkins
アーキテクチャー : noarch
バージョン : 2.190.1
リリース : 1.1
...省略...
問題
Jenkins の設定ページで「プラグインマネージャー」→「高度な設定」→「HTTP Proxyの設定」に認証付きプロキシを設定して保存する。
その後に「更新」をクリックすると以下のエラーメッセージが表示されてしまう。
There were errors checking the update sites: IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
/var/log/jenkins/jenkins.log には以下のように記録されている。
2019-10-15 06:09:00.790+0000 [id=19] INFO hudson.util.Retrier#start: Attempt #1 to do the action check updates server
2019-10-15 06:09:00.930+0000 [id=19] INFO hudson.util.Retrier#start: The attempt #1 to do the action check updates server failed with an allowed exception:
java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
at java.base/sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2168)
...省略...
2019-10-15 06:09:00.932+0000 [id=19] INFO hudson.util.Retrier#start: Calling the listener of the allowed exception 'Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"' at the attempt #1 to do the action check updates server
2019-10-15 06:09:00.932+0000 [id=19] INFO hudson.util.Retrier#start: Attempted the action check updates server for 1 time(s) with no success
2019-10-15 06:09:00.932+0000 [id=19] SEVERE hudson.PluginManager#doCheckUpdatesServer: Error checking update sites for 1 attempt(s). Last exception was: IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
「アップデートサイト」の設定はデフォルトで "https://updates.jenkins.io/update-center.json" となっており "https" から "http" に変更するとエラーが出なくなる。
対処方法
ググって以下のページで対処方法を把握。
以下、引用。
Java 8 Update 111からjava.netパッケージのHTTPS接続の際のトンネリングにBasic認証を使用できない設定がデフォルトになったようです。
回避するにはjdk.http.auth.tunneling.disabledSchemesに空文字列を設定する必要があるそうです。
Jenkins の場合はどこに記述するのが良いか以下のように確認して、設定、再起動。
~# systemctl status jenkins
...省略...
Process: 7034 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
...省略...
~# cat /etc/rc.d/init.d/jenkins
...省略...
JENKINS_CONFIG=/etc/sysconfig/jenkins
...省略...
~# cp /etc/sysconfig/jenkins{,.original}
~# vi /etc/sysconfig/jenkins
~# diff /etc/sysconfig/jenkins{.original,}
47c47,48
< JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
---
> #JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
> JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Djdk.http.auth.tunneling.disabledSchemes="
~# systemctl restart jenkins
Jenkins 再起動後に改めて「更新」をクリックして、エラーが出ずアップデートサイトにアクセスできることを確認。
関連
「HTTP Proxyの設定」にある「高度な設定...」の「テストURL」に "https" と "http" の URL のどちらを入力しても「Proxyの接続確認」をクリックすると以下のようにエラーメッセージが表示されてしまう。
https://www.google.com/ に接続できませんでした。(コード 407).
/var/log/jenkins/jenkins.log には以下のように記録されている。
2019-10-15 09:05:05.557+0000 [id=15] INFO o.a.c.h.a.AuthChallengeProcessor#selectAuthScheme: basic authentication scheme selected
2019-10-15 09:05:05.557+0000 [id=15] SEVERE o.a.c.h.HttpMethodDirector#processAuthenticationResponse: Invalid challenge: BASIC
org.apache.commons.httpclient.auth.MalformedChallengeException: Invalid challenge: BASIC
at org.apache.commons.httpclient.auth.AuthChallengeParser.extractParams(AuthChallengeParser.java:107)
...省略...
こちらは例外クラスが違う。対処方法は未調査。