Jenskinsでのsvnリポジトリのポーリングで発生するエラー
Jenkinsでsvnをポーリングするようにしていると、以下の様なエラーが発生することがあります(「Subversionのポーリングログ」から確認できます)。
ERROR: Failed to check repository revision for proto://host:port/path/to/repo
org.tmatesoft.svn.core.SVNCancelException: svn: E200015: E200015: ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled.
数日前からこのエラーが起きてたのをようやく解決できたのでメモしておきます。
このエラーは svn:externals を使って別のリポジトリを参照する構成になっている場合で、メインのリポジトリと、参照先のリポジトリの認証情報が異なるときに起こるとのこと。
- [JENKINS-21785] Check for changes in folders linked via svn:externals fails due to missing credentials - Jenkins JIRA
- Subversion Plugin - Jenkins - Jenkins Wiki
実際にエラーが発生した環境は、メインも参照先も同じサーバのリポジトリで同じ認証情報だったので、 あまり気にしたことなかったんですが、Jenkinsから外部リポジトリの更新を行う時には通常とは異なる動きでsvnクライアントが 起動するらしく、何らかのタイミングでメインのリポジトリと参照先のリポジトリの認証情報に齟齬が発生していたようです。
正しく動作させるにはジョブの設定で [Additional Credentials] を追加し、外部リポジトリのrealmというのと、それに紐付いたCredentialsを指定します。
realmの確認は以下のコマンドで出来ます。ダイアログが出てくるけどキャンセルでいいです。
svn --no-auth-cache --config-dir invalid info proto://host:port/path/to/repo
この問題は、今回みたいに同じsvnサーバ上のリポジトリでも起こりえるので svn:externals を使っているリポジトリをJenkins で触るときは必ず [Additional Credentials] を指定しておくのが正解っぽい。