2011-06-20 63 views
3

我有一个mercurial存储库,它使用子库功能(如.hgsub文件中定义的)来依赖,但我很努力地在TeamCity中实现这个功能。在mercurial subrepositories中进行身份验证

为了保存证书,我启用了mercurial_keyring扩展(所以当TeamCity为根存储库提供身份验证详细信息时,它会记住它们的子存储库)。我已经添加了一个[验证]部分mercurial.ini太:

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

如果我运行在命令行中汞的克隆,我得到提示输入密码一次,一切都很好。但通过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 

我在想什么,或者我会以完全错误的方式去解决这个问题?非常感谢!

+0

您是否考虑将密码存储在mercurial.ini文件中?我知道他们会以明文形式存储,但我现在遇到的问题与您现在正在尝试的相同,我在某个时候放弃了。我拥有的TeamCity服务器无论如何都是相当安全的(我希望)。 –

+0

@Lasse我也试过了,我仍然得到相同的错误 - 它似乎没有通过凭据。我认为你有这个工作虽然...你能想到我可能会失踪的其他任何东西吗?谢谢! –

+0

您是否将设置置于正确的mercurial.ini文件中,该文件是您正在运行TeamCity代理的用户的文件? –

回答

3

似乎直接从TeamCity传递证书不会与mercurial_keyring一起工作,但如果我在mercurial.ini文件中以明文方式指定用户名和密码(确保TeamCity构建代理正在运行的帐户下可以访问它下),然后这工作。

如果在用户路径下不起作用,mercurial.ini文件可以放在<mercurial install path>\mercurial.ini之下。

不理想,但一个解决方案...如果其他人发现更好的,请让我知道。

0

可能是它得到了固定的TeamCity的最后版本,但下面的工作对我来说:

  1. 配置生成代理服务与 访问HG存储库(根和subrepos)
  2. 下域帐户下运行
  3. 启用生成代理mercurial_keyring并添加[auth]部分 含汞配置
  4. 尝试手工克隆库,输入密码 。无需等到整个repo被克隆 - 当显示“请求所有更改”消息时,可以终止 。
  5. 玩得开心 - 现在服务将使用钥匙圈。
0

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

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

[web] 
cacerts = 

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

而最后一部分:根据.hgsub它可能需要在团队市版本控制设置使用VCS结账模式“上自动代理”。