0

以前は Jenkins スレーブで実行しようとしている Jenkins マスター ノードで正常に動作していたビルドがあります。

Jenkins Mercurial Plugin を使用して、スレーブ マシンの TortoiseHg インストール ディレクトリを指定しています。

私が使用している Mercurial リポジトリは、自己署名証明書 (IIS でホストされている) によって保護されています。

マシンをローカルで作業すると、問題なくリポジトリのクローンを作成できます (これは、TortoiseHg にユーザーのパスワードを保持させるために必要です)。

ただし、ビルドが Jenkins によって実行されたときに、これを機能させるには問題が発生しているようです。

私が得ている特定のエラーは以下のとおりです。

Building remotely on <slave> in workspace <workspace>
$ S:\Software\TortoiseHg/hg clone --rev default --noupdate https://<repository> <workspace_on_slave>
warning: <MercurialServerIP> certificate with fingerprint e3:5f:5e:ea:4f:da:ef:a4:0b:4a:bb:00:e8:31:59:de:ce:d0:28:94 not verified (check hostfingerprints or web.cacerts config setting)
** unknown exception encountered, please report by visiting
**  http://mercurial.selenic.com/wiki/BugTracker
** Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)]
** Mercurial Distributed SCM (version 2.1.2)
** Extensions loaded: mercurial_keyring
Traceback (most recent call last):
  File "hg", line 42, in <module>
  File "mercurial\dispatch.pyo", line 27, in run
  File "mercurial\dispatch.pyo", line 64, in dispatch
  File "mercurial\dispatch.pyo", line 87, in _runcatch
  File "mercurial\dispatch.pyo", line 685, in _dispatch
  File "mercurial\dispatch.pyo", line 467, in runcommand
  File "mercurial\dispatch.pyo", line 739, in _runcommand
  File "mercurial\dispatch.pyo", line 693, in checkargs
  File "mercurial\dispatch.pyo", line 682, in <lambda>
  File "mercurial\util.pyo", line 456, in check
  File "mercurial\commands.pyo", line 1157, in clone
  File "mercurial\hg.pyo", line 250, in clone
  File "mercurial\hg.pyo", line 93, in repository
  File "mercurial\httprepo.pyo", line 236, in instance
  File "mercurial\httprepo.pyo", line 57, in _fetchcaps
  File "mercurial\httprepo.pyo", line 169, in _call
  File "mercurial\httprepo.pyo", line 117, in _callstream
  File "urllib2.pyo", line 397, in open
  File "urllib2.pyo", line 510, in http_response
  File "urllib2.pyo", line 429, in error
  File "urllib2.pyo", line 369, in _call_chain
  File "urllib2.pyo", line 864, in http_error_401
  File "mercurial\url.pyo", line 429, in http_error_auth_reqed
  File "hgext\mercurial_keyring.pyo", line 332, in basic_http_error_auth_reqed
  File "urllib2.pyo", line 842, in http_error_auth_reqed
  File "urllib2.pyo", line 845, in retry_http_basic_auth
  File "hgext\mercurial_keyring.pyo", line 326, in find_user_password
  File "hgext\mercurial_keyring.pyo", line 177, in find_auth
  File "hgext\mercurial_keyring.pyo", line 60, in get_http_password
  File "keyring\core.pyo", line 37, in get_password
  File "keyring\backend.pyo", line 560, in get_password
  File "keyring\backend.pyo", line 573, in _get_password
pywintypes.error: (1312, 'CredRead', 'A specified logon session does not exist. It may     already have been terminated.')
ERROR: Failed to clone https://<repository>

これを乗り越えるために私ができることについて、誰かが提案できますか?

4

1 に答える 1

0

非ポーリング ソリューション: (ビルドをトリガーするためにリポジトリのポーリングを行っていない場合に役立ちます)

これを修正するには、ワークスペースの場所(通常は最終的に終了する場所)で、スレーブのリポジトリを手動で複製する必要があります。

リポジトリがスレーブで利用可能になると、「指定されたログオン セッションが存在しません。すでに終了している可能性があります。エラー。

ポーリングの解決策: (上記の解決策は Jenkins のポーリング機能では機能しないようです。そのため、以下の解決策が残されています)。

Jenkins の一部として Mercurial の認証情報を指定する方法を参照してください。(mercurial_keyring)

セットアップでサーバーにパスワードを記憶させる (そしてポーリングで動作させる) 方法を理解できた唯一の方法は、 \mercurial.ini で手動で指定することでした。

注: mercurial.ini から mercurial_keyring 行を削除する必要がある場合もあります。(すべてを手動で指定しているため、これにより、Jenkins サーバー/スレーブのキーリング拡張機能が無効になります。)

于 2012-04-25T18:25:11.407 に答える