TFS在构建失败后发送成功构建的警报

3

在TFS中,有没有办法在构建失败后获得成功构建的电子邮件?

我可以在构建失败时收到电子邮件(我已经做到了)。而且我也可以在构建成功时收到电子邮件。

但是我需要知道构建不再失败。如果我收到构建失败的电子邮件,我不想在修复之前进行检查。通过电子邮件获取这些信息会很好。

2个回答

3

1

我目前已经设置了TFS电子邮件警报,用于失败和成功的构建。 我认为成功的构建邮件只是噪音,我只想在上一次构建失败时收到它们。 我的想法是取消任何成功构建的TFS警报邮件,但允许在失败后成功的构建中发送。 我已经成功地使用TFS插件连接了代码,以查找上一个构建是否失败,并且当前构建是否成功。

public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext, NotificationType notificationType,
        object notificationEventArgs, out int statusCode, out string statusMessage, out ExceptionPropertyCollection properties)
    {
        statusCode = 0;
        properties = null;
        statusMessage = string.Empty;

        var objWriter = new System.IO.StreamWriter(@"C:\tfsTests\builds.txt", true);
        objWriter.WriteLine(DateTime.Now + "-----------------------------------------------");
        objWriter.WriteLine(DateTime.Now + notificationType.ToString());
        objWriter.WriteLine(DateTime.Now + notificationEventArgs.ToString());

        if ((notificationType == NotificationType.Notification) && (notificationEventArgs is BuildCompletionNotificationEvent))
        {
            var buildNotificationEventArgs = notificationEventArgs as BuildCompletionNotificationEvent;
            objWriter.WriteLine(DateTime.Now + buildNotificationEventArgs.Build.ToString());
            objWriter.WriteLine(DateTime.Now + buildNotificationEventArgs.Build.Definition.BuildControllerUri.ToString());
            objWriter.WriteLine(DateTime.Now + buildNotificationEventArgs.Build.Definition.LastGoodBuildUri);
            objWriter.WriteLine(DateTime.Now + buildNotificationEventArgs.Build.Definition.LastBuildUri);

            var locationService = requestContext.GetService<TeamFoundationLocationService>();
            var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
                new Uri(locationService.GetServerAccessMapping(requestContext).AccessPoint + "/" + requestContext.ServiceHost.Name));
            var buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

            var spec = buildServer.CreateBuildDetailSpec(buildNotificationEventArgs.Build.TeamProject, buildNotificationEventArgs.Build.Definition.Name);
            spec.MaxBuildsPerDefinition = 2;
            spec.QueryOrder = Microsoft.TeamFoundation.Build.Client.BuildQueryOrder.FinishTimeDescending;

            var builds = buildServer.QueryBuilds(spec);

            if (builds.Builds.Count() == 2)
            {
                if (builds.Builds[0].Status == BuildStatus.Succeeded && builds.Builds[1].Status != BuildStatus.Succeeded && builds.Builds[0].FinishTime > builds.Builds[1].FinishTime)
                    objWriter.WriteLine(string.Format("{0}", "Send Email"));
            }
        }
        objWriter.Close();
        return EventNotificationStatus.ActionPermitted;
    }

我不知道如何发送相同的TFS构建电子邮件。你知道怎么做吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接