2011-10-12 110 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生成電子郵件。你知道如何做到這一點?