【问题标题】:How do I get who broke the last build in TFS 2010我如何知道谁破坏了 TFS 2010 中的最后一个构建
【发布时间】:2011-02-14 21:22:37
【问题描述】:


有没有办法查询谁破坏了 TFS 2010 中的最后一个版本。
我知道可以订阅构建失败事件,但我想查询 TFS 以获取最后的构建和构建的状态,如果它坏了,是谁坏了它。

/吉米

【问题讨论】:

    标签: tfs tfsbuild


    【解决方案1】:

    以下代码将为您提供最新版本。这是 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, "");
        }
    

    这将为您提供可能破坏构建的候选变更集列表。这些将是您想与之交谈的人。

    这可能是你想要的。您可以尝试通过将构建日志中的失败项目与变更集中的文件进行匹配来做一些魔术,但这意味着解析出可能很大的构建日志文件。

    【讨论】:

    • pathGetChangesetsSinceDate(TeamFoundationServer tfs, DateTime date, string path) 中的值应该是多少??
    • 它应该是构建的分支的路径。确切地说,这取决于你如何分支事物。对我们来说,如果它是“Fred”应用程序的开发版本,它将是 $/Fred/Dev/src
    猜你喜欢
    • 2011-10-14
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多