3

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

4

2 回答 2

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 需要为团队项目 MyTeamProject 中的构建定义 myBuildDefinition 更新构建信息权限以执行操作。有关详细信息,请联系 Team Foundation Server 管理员。

为了克服这个问题,通过在 TeamExplorer“Builds”中单击右键设置权限,然后选择“Security...”。

于 2012-03-12T12:43:35.550 回答
2

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

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

从 [tbl_Build] 中选择 [DropLocation]、[DropLocationRoot]、[LogLocation]

我不确定是否对仓库有任何影响。可能想先检查一下。

我相信微软通常建议不要直接为这样的东西操作 SQL。您可以改用 TFS API,这将是一种相对安全的方法。

于 2012-03-09T16:38:47.157 回答