Here you go :)

import javax.mail.Message
import hudson.model.*
import com.cloudbees.plugins.flow.*
import hudson.tasks.MailAddressResolver

def getUpstreamBuild(AbstractBuild curBuild)
{
    upStreamBuild = null
    if(curBuild != null)
    {
        // find a cause that will lead to an upstream build
        for( cause in curBuild.causes )
        {
            if(cause instanceof Cause.UpstreamCause)
            {
                upStreamBuild =
Hudson.instance.getItem(cause.upstreamProject).getBuildByNumber(cause.upstreamBuild)
                break
            }
            else if(cause instanceof FlowCause)
            {
                upStreamBuild = cause.getFlowRun()
                break
            }
        }
    }
    return upStreamBuild
}

def getUserIdCause(AbstractBuild curBuild)
{
    def userIdCause = null
    if (curBuild != null)
    {
        for( cause in curBuild.causes )
        {
            if(cause instanceof Cause.UserIdCause)
            {
                userIdCause = cause
                break
            }
        }
    }

    return userIdCause
}

def getEmailFromUserId(userId)
{
    email = null
    user = User.get(userId, false, [:])
    if(user)
    {
        email = MailAddressResolver.resolve(user)
    }
    return email
}

def getRootRequesterUserEmail()
{
    try
    {
        // try to find a user ID cause for the current build
        def userIdCause = getUserIdCause(build)
        if(userIdCause != null)
        {
            return getEmailFromUserId(userIdCause.getUserId())
        }

        def rootBuild = null
        def curUpstreamBuild = getUpstreamBuild(build)

        // find the top level build
        while(curUpstreamBuild)
        {
            rootBuild = curUpstreamBuild
            curUpstreamBuild = getUpstreamBuild(curUpstreamBuild)
        }

        // try to find a user ID cause from the top level build
        userIdCause = getUserIdCause(rootBuild)
        if(userIdCause != null)
        {
            return getEmailFromUserId(userIdCause.getUserId())
        }
    }
    catch (e)
    {
        println e
    }
    return  null
}

// update the recipients with the requester from the top level build
def userEmail = getRootRequesterUserEmail()
return userEmail


On Tue, Oct 28, 2014 at 6:17 PM, Nick Dierauf <[email protected]> wrote:

> Stuart, can you post the groovy script that you use to determine the email
> address (ie, "myscript.groovy")?
> Thanks!
> Nick.
>
>
> On Tuesday, March 11, 2014 11:24:37 AM UTC-7, Stuart Rowe wrote:
>>
>> Hi, does anyone know of a way to look up a user's email address from
>> their user ID? I can't make the assumption that the email is "
>> [email protected]" because I know this isn't always the case.
>>
>> We're using the Active Directory plugin for security which is where the
>> email addresses for users are coming from. I need to manually add the
>> requester to the recipient list because this doesn't seem to be propagated
>> by BuildFlow FlowCauses. The relevant parts of build pipeline in this case
>> is:
>>
>> BuildFlow project A (scheduled by the logged in user) --> Build Flow
>> project B --> Free Style Project with an Editable Email Notification post
>> build step.
>>
>> Thanks in advance,
>>
>> Stuart
>>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Jenkins Users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/jenkinsci-users/nQtro7RisO4/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to