さっき起きたトラブルの覚書
前提
- Jenkins で、リモートの Git レポジトリをワークスペースにクローンする設定を使っている
- Git コマンドを手動で叩いてクローンするのではなくて、ジョブの設定の「ソースコード管理」でリモートの Git レポジトリを指定してある
- リモート Git レポジトリには HTTPS でアクセスしており、ユーザ名 & パスワード認証が必要
- Jenkins にユーザ名 & パスワードを認証情報として登録し、それを使用するようにジョブの「ソースコード管理」で設定してある
- Jenkins を macOS マシンで実行している
問題
レポジトリのポーリングやクローンが失敗する。ユーザ名/パスワードが間違っている時と同じエラーメッセージが出る。1
原因
- Jenkins がレポジトリにアクセスする時、
GIT_ASKPASS
環境変数を使用して Git に認証情報を渡すようになっている。 - Git のコンフィグで
credential.helper
が設定されているとGIT_ASKPASS
環境変数よりもそちらが優先される。 - macOS の Git はデフォルトでキーチェーンを使用するように
credential.helper
が設定されている
→ Jenkins から Git に認証情報が渡されない。 2
解決法
Jenkins のジョブを実行しているユーザアカウントにログインし、コマンド
git config --global credential.helper ''
を実行する。
Jenkins 環境が複数のノードで構築されている場合は実際にポーリングやビルドを行う各ノードでこれを設定する必要がありそう。