I 2010

2011-02-14 5 views
0

안녕
는 TFS 2010
내가 빌드 실패 이벤트에 가입하는 것이 가능하다는 것을 알고 있지만 나는 마지막 빌드를 부러 조회 할 수있는 방법이 있나요 TFS의 마지막 빌드를 부러 누가 어떻게합니까 마지막 빌드와 빌드 상태를 얻으려면 TFS에 쿼리하고 파손 된 경우에는 누가 파손했는지 확인하고 싶습니다.I 2010

/지미

답변

9

다음 코드는 당신에게 최신 빌드를 얻을 것이다. 이것은 TFS2008이지만 TFS2010에서도 통화가 정상적으로 작동합니다.

public static IBuildDetail GetMostRecentBuild(TeamFoundationServer tfs, string teamProject, string buildName) 
    { 
     IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer)); 

     IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(teamProject, buildName); 

     buildDetailSpec.MaxBuildsPerDefinition = 1; 
     buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; 
     buildDetailSpec.Status = BuildStatus.Failed | BuildStatus.PartiallySucceeded | BuildStatus.Stopped | BuildStatus.Succeeded; 

     IBuildQueryResult results = buildServer.QueryBuilds(buildDetailSpec); 

     if (results.Failures.Length != 0) 
     { 
      throw new ApplicationException("this needs to go away and be handled more nicely"); 
     } 

     if (results.Builds.Length == 1) 
     { 
      return results.Builds[0]; 
     } 
     else 
     { 
      return null; 
     } 

    } 

누가 빌드를 망가 뜨 렸는지 알기 란 쉽지 않습니다. 당신이해야 할 일은 results.Builds[] 어레이를 거쳐 마지막으로 성공한 빌드를 찾는 것입니다. 일단 그렇게하면 마지막으로 성공한 빌드 이후 발생한 모든 변경 집합에 대해 팀 프로젝트를 쿼리 할 수 ​​있습니다. 다음 코드는 그렇게 할 수 있습니다 : 이것은 당신에게 빌드를 부러 졌을 수 후보 변경 집합의 목록을 제공합니다

public static List<Changeset> GetChangesetsSinceDate(TeamFoundationServer tfs, DateTime date, string path) 
    { 
     VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer)); 

     VersionSpec versionFrom = GetDateVSpec(date); 
     VersionSpec versionTo = GetDateVSpec(DateTime.Now); 

     IEnumerable results = vcs.QueryHistory(path, VersionSpec.Latest, 0, RecursionType.Full, "", versionFrom, versionTo, int.MaxValue, false, true); 


     List<Changeset> changes = new List<Changeset>(); 

     foreach (Changeset changeset in results) 
     { 
      changes.Add(changeset); 
     } 

     return changes; 
    } 

    private static VersionSpec GetDateVSpec(DateTime date) 
    { 
     //Format is Dyyy-MM-ddTHH:mm example: D2009-11-16T14:32 
     string dateSpec = string.Format("D{0:yyy}-{0:MM}-{0:dd}T{0:HH}:{0:mm}", date); 
     return VersionSpec.ParseSingleSpec(dateSpec, ""); 
    } 

. 이들은 당신이 이야기하기를 원하는 사람들이 될 것입니다.

아마 이것에 대해서 알고 싶을 것입니다. 빌드 로그의 실패한 프로젝트를 변경 세트의 파일과 일치시켜 일부 마법을 시도 할 수도 있지만 잠재적으로 큰 빌드 로그 파일을 구문 분석하는 것이됩니다.

+0

+1 GetDateVSpec() 함수에 +1! – MrDustpan

+0

GetChangesetsSinceDate (TeamFoundationServer tfs, DateTime date, string path)에서'path'의 값은 무엇입니까? –

+0

빌드 된 분기의 경로 여야합니다. 정확히 어떤 것들을 가지는지에 달려 있습니다. 우리에게, "Fred"어플리케이션의 dev build라면, 그것은'$/Fred/Dev/src'입니다. – Robaticus