2012-03-10 63 views
1

我已经在TFS 2010中定义了一个包含“\ server \ BuildDrop \”之类的放置位置的构建。当我对构建进行排队时,它会将构建放入类似“\ server \ BuildDrop \ MyBuild \ MyBuild_20120309.1”之类的内容中。如何在BuildDrop位置找到最新版本?

我希望能够定义一个构建,将放置在一个永不改变的确切位置。 我可以将构建定义更改为始终放置在像这样的位置吗?

1)\服务器\ BuildDrop \ MyBuild \

2)\服务器\ BuildDrop \ MyBuild \最新\

回答

2

如果人们想知道在哪里可以找到最新的版本,我认为这是最好的教育他们在哪里放置位置是什么,构建名称,使他们能够很容易地确定哪一个是最新的自己。如果要将放置位置的输出复制到相同的目录中,则必须创建运行构建的自定义模板(通过修改默认模板)。在构建期间,在将文件复制到放置位置之后,我执行一个脚本将放置位置中的文件复制到常见的“最新”目录。但是,在运行构建时,您可以轻松地遇到人们在“最新”目录中访问文件的问题,因此构建失败是因为它无法覆盖这些文件。

如果您想确定上次成功构建的放置位置,也可以通过编程方式进行。下面是我写的只是做一个自定义活动的一个片段:

 string tfsUri = "http://pathToTfsServer:8080/tfs"; 
     string projectName = "MyTfsProject"; 
     string buildDefinition = "MyTfsBuildDefinitionName"; 

     // connect to the Project and query the builds of the BuildDefinition 
     var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsUri), new UICredentialsProvider()); 
     tfs.EnsureAuthenticated(); 
     var buildServer = tfs.GetService<IBuildServer>(); 
     var buildDetails = buildServer.QueryBuilds(projectName, buildDefinition); 

     // sort builds based on start time 
     Array.Sort(buildDetails, delegate(IBuildDetail build1, IBuildDetail build2) 
     { 
      return build1.StartTime.CompareTo(build2.StartTime); 
     }); 

     // return only the last successful build that currently exists 
     for (int i = buildDetails.Length - 1; i >= 0; i--) 
     { 
      if (buildDetails[i].Status == BuildStatus.Succeeded && buildDetails[i].IsDeleted == false) 
       return buildDetails[i]; 
     } 

如果您正在寻找在定制团队建设2010,那么我建议阅读Ewald Hoffman's tutorials on the subject

0

当构建被触发时,一文件夹将在指定的放置位置等来创建

  • MyBuild_20120309.1
  • MyBuild_20120309.2
  • MyBuild_20120310.1

文件夹的命名规则是"Build Definition"_"yyyymmdd"."build number" 版本号是一天建立给出的数字。因此,当您触发构建时,您可以转到构建放置位置,然后转到最新的文件夹(基于命名约定)并获取设置。

+0

有没有什么办法可以定义一个永不改变的放置位置(如上所示)? – tgriffin 2012-03-10 06:01:19

+0

你的意思是设置必须始终在指定的文件夹中,而不是每次都是唯一的文件夹? – 2012-03-10 14:22:08