SVN外部和自动构建

时间:2009-08-08 14:21:18

标签: svn build tortoisesvn teamcity

我有一个项目使用SVN外部包含一些东西(实际上它是MSBuild社区任务,但这是切向的)。外部存储库需要用户名“guest”但没有密码。

我设置了一个externals属性,这在本地进行SVN更新时非常有效。我的TeamCity持续集成构建运行时出现问题。 TeamCity尝试检查外部的源和扼流圈,因为它不知道用户名。

我已经尝试将外部结构定义为TeamCity中单独的SVN根目录,但这不起作用,因此我认为不是解决方案。

那我该怎么做呢?如何让TeamCity知道它需要登录外部SVN仓库?

5 个答案:

答案 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服务器本地的目录。第一次签到这个目录时,你应该有机会设置外部。