我有一个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
我错过了什么,或者我是以完全错误的方式解决这个问题?非常感谢!
答案 0 :(得分:3)
似乎直接从TeamCity传递凭据不能与mercurial_keyring一起使用,但是如果我在mercurial.ini文件中以明文指定用户名和密码(确保它可以在帐户下访问,则TeamCity构建代理在),然后这个工作。
如果mercurial.ini文件在用户路径下不起作用,则可以将其置于<mercurial install path>\mercurial.ini
下。
不理想,但解决方案......如果其他人找到更好的解决方案,请告诉我。
答案 1 :(得分:0)
可能是在TeamCity的最新版本中修复了,但以下内容对我有用:
mercurial_keyring
并添加[auth]
部分
到mercurial config 答案 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结帐模式“自动代理”。