4

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

我设置了一个 externals 属性,这在本地进行 SVN 更新时效果很好。当我的 TeamCity 持续集成构建运行时,问题就出现了。TeamCity 尝试检查外部资源和阻塞,因为它不知道用户名。

我尝试在 TeamCity 中将外部定义为单独的 SVN 根,但这不起作用,所以我认为这不是解决方案。

那么我该如何进行这项工作呢?如何让 TeamCity 知道它需要登录到外部 SVN 存储库?

4

5 回答 5

4

如果不需要密码,只需要一个用户名,那么您可以在配置文件中轻松设置servers(在 Windows 上,它位于%APPDATA%\Subversion\servers)。

指定服务器,然后设置“用户名”选项。例如:

[groups]
communitytasks = *.comunityserver.com

[communitytasks]
username = guest
于 2009-08-08T16:36:34.700 回答
2

身份验证信息存储在运行程序的用户本地的配置文件中。或者至少,它可以配置为这样做。

我敢打赌,TeamCity 的代理程序在与您登录机器​​的用户不同的用户下运行。如果是这样,您应该尝试使用相同的用户登录机器,然后svn checkout对临时目录执行操作并填写用户名和密码。这将被缓存,因此当 TeamCity 在同一用户下运行 SVN 时,它应该重用该信息。

于 2009-08-08T14:24:42.507 回答
2

TeamCity 使用来自 SVN 客户端的缓存身份验证信息来访问外部。除了从命令行客户端访问远程服务器、在本地缓存凭据并让 TeamCity 使用它们之外,没有其他方法可以指定外部身份验证信息(在 TeamCity SVN 设置中,有一个复选框是否使用存储的 SVN 设置)

于 2009-08-24T09:34:11.280 回答
1

不特定于 TeamCity,但如果您需要在签出svn:externals存储库时指定要使用的用户名:

svn:externals属性中,不要指定用户名:

the_vendor_dir     svn+ssh://hostname/path/to/repo

默认情况下,结帐将使用当前用户的用户名。要使用不同的用户名:

~/.subversion/config:
[tunnels]
ssh = $SVN_SSH ssh -ljdoe

这将导致 Subversionjdoe用作任何svn+ssh未指定用户名的隧道的用户名。

除了svn+ssh在 Subversion 级别更改隧道,您还可以在 SSH 级别更改它:

~/.ssh/config:
Host svn.example.com
   User jdoe

Stefan 上面关于我的回答~/.subversion/servers对我不起作用,并且似乎不应该起作用,因为该username设置没有记录在该文件中。

于 2013-11-11T05:00:37.503 回答
0

我从未使用过 TeamCity,但使用过其他 CI 工具。

而不是让 TeamCity 轮询 svn 存储库以获取新修订。也许有一个提交后挂钩调用 TeamCity,但在此之前,让它运行一个 ant 脚本,该脚本 svn 更新 TeamCity 服务器的本地目录。第一次结帐到此目录时,您应该有机会设置外部。

于 2009-08-08T14:53:31.913 回答