我有一个项目使用SVN外部包含一些东西(实际上它是MSBuild社区任务,但这是切向的)。外部存储库需要用户名“guest”但没有密码。
我设置了一个externals属性,这在本地进行SVN更新时非常有效。我的TeamCity持续集成构建运行时出现问题。 TeamCity尝试检查外部的源和扼流圈,因为它不知道用户名。
我已经尝试将外部结构定义为TeamCity中单独的SVN根目录,但这不起作用,因此我认为不是解决方案。
那我该怎么做呢?如何让TeamCity知道它需要登录外部SVN仓库?
答案 0 :(得分:4)
如果不需要密码,只有用户名,那么您可以在servers
配置文件中轻松设置它(在Windows上,它位于%APPDATA%\Subversion\servers
)。
指定服务器,然后设置“用户名”选项。例如:
[groups]
communitytasks = *.comunityserver.com
[communitytasks]
username = guest
答案 1 :(得分:2)
身份验证信息存储在运行该程序的用户本地的配置文件中。或者至少,它可以配置为执行此操作。
我敢打赌,TeamCity的代理程序在与您登录机器的用户不同的用户下运行。如果是这样,您应该尝试使用相同的用户登录计算机,然后svn checkout
到临时目录并填写用户名和密码。这将被缓存,因此当TeamCity在同一用户下运行SVN时,它应该重用该信息。
答案 2 :(得分:2)
TeamCity使用来自SVN客户端的缓存身份验证信息来访问外部。除了从命令行客户端访问远程服务器,本地缓存凭据以及让TeamCity使用它们之外,没有其他方法可以指定外部身份验证信息(在TeamCity SVN设置中有一个复选框是否使用存储的SVN设置)
答案 3 :(得分:1)
不是特定于TeamCity,但是如果您需要在签出svn:externals
存储库时指定要使用的用户名:
在svn:externals
属性中,不要指定用户名:
the_vendor_dir svn+ssh://hostname/path/to/repo
默认情况下,结帐将使用当前用户的用户名。要使用其他用户名:
~/.subversion/config:
[tunnels]
ssh = $SVN_SSH ssh -ljdoe
这将导致Subversion使用jdoe
作为未指定用户名的任何svn+ssh
隧道的用户名。
您可以在SSH级别更改它,而不是在Subversion级别更改svn+ssh
隧道:
~/.ssh/config:
Host svn.example.com
User jdoe
Stefan上面关于~/.subversion/servers
的回答对我不起作用,似乎不应该有效,因为username
设置没有在该文件中记录。
答案 4 :(得分:0)
我从未使用过TeamCity,但使用过其他CI工具。
而不是让TeamCity轮询svn repo进行新修订。也许有一个post commit钩子调用TeamCity,但在这之前,让它运行一个ant脚本,svn更新TeamCity服务器本地的目录。第一次签到这个目录时,你应该有机会设置外部。