【问题标题】:TFS Alert of successful build after failed build构建失败后成功构建的 TFS 警报
【发布时间】:2014-08-20 11:53:36
【问题描述】:

在 TFS 中构建失败后是否可以收到构建成功的电子邮件?

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

但我需要知道构建不再失败。如果我收到一封关于构建失败的电子邮件,我不想在它再次工作之前签入。最好通过电子邮件获取该信息。

【问题讨论】:

    标签: tfs tfsbuild


    【解决方案1】:

    我不相信使用警报资源管理器可以做到这一点。但是您可以创建一个订阅构建通知的自定义 Web 服务,然后自己实现这个逻辑。

    有关使用您自己的 Web 服务订阅 TFS 事件的详细信息,请参阅本文:http://blog.hinshelwood.com/team-foundation-server-2010-event-handling-with-subscribers/

    【讨论】:

      【解决方案2】:

      我目前有 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 构建电子邮件。你知道怎么做吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-13
        • 2018-03-31
        • 2017-09-17
        • 1970-01-01
        • 2018-12-20
        • 2011-01-15
        相关资源
        最近更新 更多