Notificare via mail la persona che ha rotto la build

Nella continuous integration uno dei punti fondamentali è quello di correggere il prima possibile una build che fallisce.

Per notificare al team che la build è fallita possiamo creare una activity personalizzata nel workflow o agganciarsi agli event di tfs.

In rete esistono una serie di divertenti implementazioni dal coniglio al razzo.
Nel mio scenario volevo inviare una mail a chi ha eseguito l’archiviazione che ha portato alla rottura della build.

Avevo già parlato in un post precedente di come lavorare con gli event.
Creiamo quindi attraverso i power tools di tfs 2010 all’interno dell’alert explorer un nuova sottoscrizione.

image

All’interno del nostro web service

public void Notify(string eventXml, string tfsIdentityXml)
{
    //Deserializza il messaggio
    BuildCompletionEvent2 buildCompletionEvent = Serialization.XMLDeserialize<BuildCompletionEvent2>(eventXml);
    
    //Ottine chi ha scatenato la build
    string requestFor = buildCompletionEvent.RequestedFor;
    string displayName = GetDisplayName(requestFor);
    string mail = GetDisplayName(requestFor);

    //TODO:
    //Inviare la mail
}

/// <summary>
/// Dal nome del dominio ritorna il nome completo dell'utente
/// Questo metodo viene utilizzato per completare quei campi ad esempio assegnato a che vogliono
/// il nome completo e non lo user di dominio
/// </summary>
/// <param name="domainName">domain\Roberto</param>
/// <returns>Roberto Cappelletti</returns>
public string GetDisplayName(string domainName)
{
    TeamFoundationServer tfs = new TeamFoundationServer("url", "credentials");
    IGroupSecurityService gss = (IGroupSecurityService)tfs.GetService(typeof(IGroupSecurityService));
    Identity identity = gss.ReadIdentity(SearchFactor.AccountName, domainName, QueryMembership.None);
    return identity.DisplayName;
}

/// <summary>
/// Dal displayName ritorna l'indirizzo email dell'utente
/// </summary>
/// <param name="domainName">Roberto Cappelletti</param>
/// <returns>roberto.cappelletti[at]elfo[punto]net</returns>
public string GetAddressMail(string displayName)
{
    TeamFoundationServer tfs = new TeamFoundationServer("url", "credentials");
    IGroupSecurityService gss = (IGroupSecurityService)tfs.GetService(typeof(IGroupSecurityService));
    Identity identity = gss.ReadIdentity(SearchFactor.EveryoneApplicationGroup, "Team Foundation Valid Users", QueryMembership.Expanded);
    Identity[] identities = gss.ReadIdentities(SearchFactor.Sid, identity.Members, QueryMembership.None);
    foreach (Identity iden in identities)
    {
        if (iden.Type == IdentityType.WindowsUser)
            if (string.Equals(iden.DisplayName, displayName))
                return iden.MailAddress;
    }
    return null;
}
Tag di Technorati: ,,
«marzo»
domlunmarmergiovensab
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789