TFS Предупреждение об успешной сборке после неудачной сборки - PullRequest
3 голосов
/ 12 октября 2011

Можно ли получить электронное письмо об успешной сборке после неудачной сборки в TFS?

Я могу получать электронные письма при сбое сборки (что я делаю).И я могу получать электронные письма, когда сборка завершается успешно.

Но мне нужно знать, что сборка больше не дает сбоя.Если я получаю электронное письмо о том, что сборка не удалась, я не хочу регистрироваться, пока она не заработает снова.Было бы неплохо получить эту информацию по электронной почте.

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Я не верю, что это будет возможно с помощью обозревателя оповещений.Но вы могли бы создать пользовательский веб-сервис, который подписывался на уведомления о сборке, а затем реализовать эту логику самостоятельно.

См. Эту статью для получения подробной информации о подписке на события TFS с вашим собственным веб-сервисом: http://blog.hinshelwood.com/team-foundation-server-2010-event-handling-with-subscribers/

1 голос
/ 20 августа 2014

В настоящее время у меня есть оповещения по электронной почте о настройке 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.Вы знаете, как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...