【发布时间】:2014-08-20 11:53:36
【问题描述】:
在 TFS 中构建失败后是否可以收到构建成功的电子邮件?
我可以在构建失败时收到电子邮件(我会这样做)。当构建成功时,我可以收到电子邮件。
但我需要知道构建不再失败。如果我收到一封关于构建失败的电子邮件,我不想在它再次工作之前签入。最好通过电子邮件获取该信息。
【问题讨论】:
在 TFS 中构建失败后是否可以收到构建成功的电子邮件?
我可以在构建失败时收到电子邮件(我会这样做)。当构建成功时,我可以收到电子邮件。
但我需要知道构建不再失败。如果我收到一封关于构建失败的电子邮件,我不想在它再次工作之前签入。最好通过电子邮件获取该信息。
【问题讨论】:
我不相信使用警报资源管理器可以做到这一点。但是您可以创建一个订阅构建通知的自定义 Web 服务,然后自己实现这个逻辑。
有关使用您自己的 Web 服务订阅 TFS 事件的详细信息,请参阅本文:http://blog.hinshelwood.com/team-foundation-server-2010-event-handling-with-subscribers/
【讨论】:
我目前有 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 构建电子邮件。你知道怎么做吗?
【讨论】: