2012-03-09 56 views
3

我们的服务器已用于我们的构建投放位置,现在正在退役。我知道如何将当前的构建定义更改为使用新的服务器,但是如何更改已完成构建的历史记录?我希望能够打开过去的版本并点击“Open Drop Folder”并被带到新的服务器。我们将手动将旧版本复制到新服务器。如何在TFS 2010中更改历史版本的投递文件夹

+0

整个服务器是否退役?或者是服务器徘徊在周围,但你不能再使用它来做滴?如果它是前者,则可以使用DNS/WINS别名将旧构建路由发送到新服务器。 – 2012-03-09 19:19:29

+1

是的整个服务器正在退休。我们认为DNS/WINS别名是一个选项,但担心有人会忘记为什么该条目可能存在并稍后清除。 (不要问...) – Bloodhound 2012-03-10 01:52:17

回答

4

下面的示例似乎工作:

,你应该考虑到
using System; 
using System.Collections.Generic; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Client; 

namespace ChangeDropLocation 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://MyServer:8080/tfs/Collection")); 
      var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer)); 

      IBuildDetail buildDetail = buildService.GetBuild(new Uri("vstfs:///Build/Build/1506")); 
      buildDetail.DropLocation ="\\somewhere"; 
      var buildDetails = new List<IBuildDetail>(); 
      buildDetails.Add(buildDetail); 
      buildService.SaveBuilds(buildDetails.ToArray()); 
     } 
    } 
} 

一件事是,你会很可能缺乏权限来更新构建信息。在我的第一次尝试中,虽然我是项目管理员,但我得到以下结果:

TF215106:访问被拒绝。 DOMAIN \ username needs更新内部版本 信息权限构建定义myBuildDefinition在团队 项目MyTeamProject中执行该操作。有关更多信息,请致电 联系Team Foundation Server管理员。

为了解决这个问题,请右键单击TeamExplorer“Builds”&,然后选择“Security ...”。

+0

因此,这样做实际上更新了历史“已完成”版本中的放置位置?或者这只是批量更新当前的构建定义? – JohnZaj 2014-07-08 16:20:17

2

我不知道有任何工具可以做到这一点。也许有一个TFS powershell命令,但是我认为你可以 - 在采取正确的预防措施之后 - 直接更新SQL Db。

映射到放置位置存储在tbl_Build中的集合SQL Db中。

选择[DropLocation],[DropLocationRoot],[日志位置]从[tbl_Build]

我不知道是否有在仓库的任何影响,但。可能要先检查一下。

我相信微软一般建议不要直接操纵SQL这样的东西。你可以使用TFS API,这将是一个相对更安全的方法。

+0

我希望避免修改数据库。我希望有一个工具。我总是可以像你提到的那样使用API​​。 – Bloodhound 2012-03-09 18:33:25

+2

请不要碰(甚至SELECT查询)操作数据库。这完全不受支持,如果你开始搞乱数据库,TFS团队可以并且会拒绝支持。实际上有一种使用API​​来做到这一点的方法。我必须得到代码并在这里发布以支持的方式更新此代码。 – 2012-03-10 14:17:10

+0

埃德,你有没有找到这个代码? – 2013-05-01 19:36:19