2011-10-12 111 views
3

TFS中构建失败后是否有获得成功构建的电子邮件?TFS失败构建后成功构建的警报

当构建失败时(我这样做),我可以收到电子邮件。当构建成功时,我可以收到电子邮件。

但我需要的是要知道构建不再失败。如果我收到构建失败的电子邮件,我不想在重新开始工作之前登录。通过电子邮件获取这些信息会很好。

回答

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生成电子邮件。你知道如何做到这一点?