TFS成功构建警报邮件,如果只有最后构建是失败的,通过TFS插件
本文关键字:TFS 构建 最后 插件 通过 失败 如果 成功 | 更新日期: 2023-09-27 18:18:50
我目前有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构建电子邮件。你知道怎么做吗?
您已经订阅了构建事件。如果您使用的是TFS 2013或VSO,您可以在web访问中打开您的团队项目,然后单击右上角的齿轮转到管理端。应该有一个Alerts选项卡
如果你仍然在Visual Studio的2012年以前的服务器上,你可以在团队资源管理器中右键单击团队项目并编辑警报。