如何在项目之间移动TFS 2010构建定义?

mar*_*arc 11 tfs team-build tfs2010 build-definition

我有一些在ProjectX下创建的TFS 2010构建定义.现在源代码已移至从属于ProjectY的文件夹.如何将构建定义移动到ProjectY,以便它们显示在Project Explorer的Team Explorer的Builds节点下?

Sea*_*nch 12

我认为没有开箱即可将构建定义从一个项目复制到另一个项目.但是,您应该能够使用TFS API执行此操作.您需要将构建过程模板(Pete所指的内容)移动到新项目的Build Process Template文件夹中.之后你会做类似的事情:

var server = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("<server uri>"));

IBuildServer buildServer = server.GetService<IBuildServer>();
var buildDetails = buildServer.QueryBuildDefinitions("Project X");
foreach(var build in buildDetails)
{
        var buildDefinition = buildServer.CreateBuildDefinition("Project Y");
        buildDefinition.Name = "Copy of " + build.Name;
        buildDefinition.BuildController = build.BuildController;
        // This finds the template to use
        buildDefinition.Process = buildServer.QueryProcessTemplates("Project Y")[0]; 
        buildDefinition.ProcessParameters = build.ProcessParameters;
        buildDefinition.Save();                
}
Run Code Online (Sandbox Code Playgroud)

有几点需要注意.您需要处理将工作区映射从一个项目转换为另一个项目的问题.您还需要更改buildDefinition.Process行以查找特定模板.


gre*_*egn 6

肖恩上面回答的PowerShell版本

# Copy some TFS build defintions from one project collection to another

[void][Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void][Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
[void][Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")

$tfsUrl = "http://lontfs_at:8080/tfs/XXX"
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($tfsUrl)
$vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])
$buildServer = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])

$buildDetails = $buildServer.QueryBuildDefinitions("Project X");
foreach( $build in $buildDetails)
{
        $buildDefinition = $buildServer.CreateBuildDefinition("Project Y");
        $buildDefinition.Name = "Copy of " + $build.Name;
        $buildDefinition.BuildController = $build.BuildController;
        # This finds the template to use
        $buildDefinition.Process = $buildServer.QueryProcessTemplates("Project Y")[0]; 
        $buildDefinition.ProcessParameters = $build.ProcessParameters;
        $buildDefinition.Save();                
}
Run Code Online (Sandbox Code Playgroud)


ckk*_*tty 5

在VS2010中,TFS Power Tools可以将构建定义从一个项目移动到另一个项目,如此链接中的第二个答案所示:是否可以导出TFS 2010构建定义?,如下图所示.

c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>tfpt 
builddefinition /collection:"http://ServerX:8080/tfs/Collection X" /clone "Project 1\Build 
Definition X" "Project 2\Copy of Build Definition X"
Run Code Online (Sandbox Code Playgroud)

适用于VS2010的TFS电动工具可从以下网址下载:http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f