Jenkins Slave的Mercurial / TortoiseHg问题 - 指定的登录会话不存在

时间:2012-04-25 18:23:08

标签: mercurial jenkins tortoisehg self-signed tortoisehg-2.0

我有一个以前在Jenkins主节点上工作正常的构建,我现在正试图在Jenkins slave上执行。

我正在使用Jenkins Mercurial插件并指向从机上的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>

有人可以就我能做些什么来提出建议吗?

1 个答案:

答案 0 :(得分:0)

非投票解决方案(如果您未对存储库进行轮询以触发构建,则非常有用)

对此的修复原来是手动克隆工作区位置的奴隶上的存储库(通常会以此结束)。

似乎一旦存储库在从服务器上可用,它就能够通过“指定的登录会话”不存在。它可能已经被终止。&#39;错误。

投票解决方案(上述解决方案似乎不适用于Jenkins轮询功能,因此我们将继续使用下面的解决方案。)

请参阅How do you specify authentication information for Mercurial as part of Jenkins? (mercurial_keyring)

在我的设置中,我能够弄清楚如何让服务器记住密码(并使用轮询)的唯一方法是在\ mercurial.ini中手动指定它。

注意:您可能还必须从mercurial.ini中删除mercurial_keyring行。 (这会禁用Jenkins服务器/从服务器上的密钥环扩展,因为我们手动指定所有内容。)