torutkのブログ

ソフトウェア・エンジニアのブログ

Jenkinsのプラグイン管理でHTTPプロキシを設定するとGitプラグインがそのHTTPプロキシ設定を使ってリポジトリにアクセスしてしまう

Jenkinsはソースコード管理システムからファイルを取り出してビルド等の作業をするのが主要機能の一つです。ここで、ソースコード管理システムにGitを使っている場合、Jenkinsは標準でGitには対応していないので、別途Gitプラグインを入れる必要がありあす。プラグインを入れるのは簡単で、[Jenkinsの管理] > [プラグインの管理] > [利用可能]タブを選択し、Git pluginをインストールします。

このようにプラグインをインストールするにはインターネット接続が必要です。組織内などでJenkinsをファイアウォール内で稼働している場合、大抵はHTTPプロキシ経由での接続となります。JenkinsでプラグインをHTTPプロキシ経由でインストールする場合、[プラグインの管理] > [高度な設定]で、HTTPプロキシの設定をします。

ところで、Jenkinsでプロジェクトを作成し、ソースコード管理にGitを選択し、GitリポジトリのURLにGitの共有リポジトリへのURLを入力すると、次のようなエラーが表示されました。

Failed to connect to repository : Command "git ls-remote -h http://scm.dev1.example.com/git/torutk/hello.git HEAD"
 returned status code 128:
stdout:
stderr: error: Failed connect to consolini:8080; Operation now in progress while accessing http://scm.dev1.example.com/git/torutk/hello.git/info/refs

fatal: HTTP request failed

ここで、Jenkinsのプラグインの管理でHTTPプロキシが設定されており、一方でGitリポジトリが社内にある場合、GitプラグインはHTTPプロキシを使ってGitリポジトリへ接続しようとするため、エラーとなります。
これは、スレーブで実行する場合もHTTPプロキシの設定が引き継がれてしまいます。

この問題は次のチケットで上がっていますが、今のところ修正の兆しはなさそうです。チケットのコメントには、GitリポジトリもHTTPプロキシ越えなのだから今の仕様がいいんだ、という意見も書かれています。うーむ・・・。
https://issues.jenkins-ci.org/browse/JENKINS-31464

回避策は、Jenkinsのプラグインの管理でHTTPプロキシの設定の対象外ホストにHTTPプロキシ経由でないGitリポジトリを指定します。
ですが、指定には少し癖がありそうです。

はうまくいっているようですが、*.example.com のように、先頭から複数項目をワイルドカードで指定するのはだめなようです。