HIDARI日記(右)

そのときどき興味ある技術を中心にだらだら書いてます。内容は個人の見解であり、所属する企業を代表するものではありません。

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から外部リポジトリの更新を行う時には通常とは異なる動きで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] を指定しておくのが正解っぽい。