2012-04-04 9 views
6

TFSの1つのブランチ(例えば、メイン)に基づいて実行されるいくつかのビルド定義があります。TFS:特定のチェンジセットを含むビルドの問い合わせ

TFSに質問して、私が提供する特定のチェンジセット番号を含むすべてのビルドを検索し、TFSに含まれるビルド名の文字列のリストを返したいと思います。任意の種類のアプリ(VS拡張機能、CLIアプリ、winformsなど)が行います。

注:これは 'plz give me the code'リクエストではありません。私はそれを踏んで喜んでこれについて真剣に取り組んでいます。データベースやSDKをクエリする方法に関するドキュメントへのポインタ、またはビルドをクエリする方法の例。探し始める場所が非常に便利です。ありがとう。

答えて

8

次のスニペットは、すべてのクロールコレクションのすべてのチームプロジェクトの定義を構築し、それぞれをチェックし、すべての入力チェンジ番号に協会のために構築していきます:

using System; 
using System.Linq; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace FindChangesetInBuild 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName")); 

      var versionControl = teamProjectCollection.GetService<VersionControlServer>(); 
      var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer)); 

      var teamProjects = versionControl.GetAllTeamProjects(true); 
      foreach (var teamProject in teamProjects) 
      { 
       var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name); 
       foreach (var buildDefinition in buildDefinitions) 
       { 
        var builds = buildService.QueryBuilds(buildDefinition); 
        foreach (var buildDetail in builds) 
        { 
         var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail); 
         if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0]))) 
         { 
          Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

言うまでもなくする、これがありますブルートフォース攻撃。
buildDefinitionのリストを絞り込み、特定のteamProjectsなどに焦点を当てれば、さらにコードを洗練することができます。いずれにしても、上記のように有用であるとは想像もしません!

(明らかに)MSDNとは別に、TFS-SDKの大きなリソースはShai Raitenのblogです。
Build-Speficicの例については、いくつかの興味深いSOの投稿についてはhere & hereもチェックしてください。

+0

ありがとう!私は、クエリの際に利用可能なフィルタリングオプションがもっとあることを望みます。情報を保持しているビルド数が多く、クエリが返されるまでに非常に時間がかかります。私は実験して見ます。 –

2

この小さなDBクエリをTFS 2010で使用し、90264をチェンジセットIDで置き換えることができます。

USE Tfs_Warehouse 
go 
SELECT BuildName 
FROM DimBuild 
    INNER JOIN FactBuildChangeset 
    ON DimBuild.BuildSK = FactBuildChangeset.BuildSK 
WHERE FactBuildChangeset.ChangesetSK = 90264 
関連する問題