跨mercurial子存储库进行身份验证

时间:2011-06-20 17:35:04

标签: mercurial teamcity

我有一个mercurial存储库,它使用子存储库功能(在.hgsub文件中定义)来获取依赖关系,但是我很难在TeamCity中使用它。

我已启用mercurial_keyring扩展以保存凭据(因此,当TeamCity提供根存储库的身份验证详细信息时,它会记住它们用于子存储库)。我也向mercurial.ini添加了[auth]部分:

[auth]
bitbucket.schemes = https
bitbucket.prefix = https://bitbucket.org/xyz
bitbucket.username = xyz

如果我从命令行运行hg clone,我会收到一次密码提示,一切都很好。但是,通过TeamCity运行的初始结账失败了

VCS root: mercurial: https://bitbucket.org/xyz/projectA {instance id=23, parent id=1}, due to error: 'cmd /c hg update -C -r 4a08f587bb1f' command failed. stderr: abort: http authorization required  stdout: pulling subrepo src\Common.Library from https://bitbucket.org/xyz/common.library

我错过了什么,或者我是以完全错误的方式解决这个问题?非常感谢!

3 个答案:

答案 0 :(得分:3)

似乎直接从TeamCity传递凭据不能与mercurial_keyring一起使用,但是如果我在mercurial.ini文件中以明文指定用户名和密码(确保它可以在帐户下访问,则TeamCity构建代理在),然后这个工作。

如果mercurial.ini文件在用户路径下不起作用,则可以将其置于<mercurial install path>\mercurial.ini下。

不理想,但解决方案......如果其他人找到更好的解决方案,请告诉我。

答案 1 :(得分:0)

可能是在TeamCity的最新版本中修复了,但以下内容对我有用:

  1. 将构建代理服务配置为在域帐户下运行 访问HG存储库(root和subrepos)
  2. 在构建代理上启用mercurial_keyring并添加[auth]部分 到mercurial config
  3. 尝试手动克隆存储库,输入     密码。无需等到克隆整个回购 - 它可以     当显示“请求所有更改”消息时终止。
  4. 玩得开心 - 现在服务将使用密钥环。

答案 2 :(得分:0)

可能不应将[auth]部分添加到TC代理的mercurial.ini部分。 Team City使用--config auth...个选项hg。我还建议不要使用mercurial_keyring,而是在VCS root中设置用户名和密码 - 这是安全的,并且在不同的TC代理之间共享。

不确定bitbucket,但在其他情况下https方案的使用可能需要证书配置。这可以在mercurial.ini

中配置
[web]
cacerts =

[hostfingerprints]
# hides mercurial warnings
domain-name = ab:cd:...:01

最后一部分:取决于.hgsub,可能需要在Team City版本控制设置中使用VCS结帐模式“自动代理”。