我目前有关于失败和成功构建的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访问打开您的团队项目,然后单击右上角的齿轮以转到管理端。应该有一个“警报”选项卡。

如果您仍在Visual Studio中的2012年之前的服务器上,则可以在团队资源管理器中的团队项目上单击鼠标右键,然后编辑警报。

关于c# - 如果通过TFS插件只有最后一次构建失败,则TFS成功构建警报电子邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25397194/

10-09 17:54
查看更多