mipmip
mipmip

Reputation: 1160

How to get e-mail address of current Jenkins user to use in groovy script

I've created a groovy script for the new Jenkins Workflow Plugin, https://github.com/jenkinsci/workflow-plugin. I want it to send a mail to the user who started the job when it needs input for the next step. I've tried to search the API but I can't find anything about getting the users email address.

I would think of something like this.

import hudson.model.User
def user = User.current()
def mailAddress = user.getMailAddress()

Is there a way to get the current Jenkins user' address in groovy?

Upvotes: 19

Views: 28458

Answers (7)

Zhang Buzz
Zhang Buzz

Reputation: 11068

My script is as below:

import jakarta.mail.Message

def cause = build.getCause(hudson.model.Cause.UserIdCause.class)
def id = cause.getUserId()
def user = hudson.model.User.get(id)
def email = user.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress()

msg.setRecipients(Message.RecipientType.TO, email)

Upvotes: 0

Maxim Suslov
Maxim Suslov

Reputation: 5465

You can use the following routine:

import hudson.tasks.Mailer;
import hudson.model.User;

/**@
* Get user's email
*
* @param id null for a user who triggered the current build or name otherwise
* @return user's email
*/

def getUserEmail(String id=null) {
    User user = User.getById(id ?: currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId(), false)
    user?.getProperty(Mailer.UserProperty.class).getAddress()
}

Upvotes: 1

Mohamed Amine Kharrez
Mohamed Amine Kharrez

Reputation: 144

You can get the author name and then use it for an example on a mailing registry or something like that:

 def author = ""
 def changeSet = currentBuild.rawBuild.changeSets               
 for (int i = 0; i < changeSet.size(); i++) 
    {
       def entries = changeSet[i].items;
       for (int i = 0; i < changeSet.size(); i++) 
                {
                           def entries = changeSet[i].items;
                           def entry = entries[0]
                           author += "${entry.author}"
                } 
     }
     print author;

Upvotes: 1

zystem
zystem

Reputation: 75

import hudson.tasks.Mailer;
import hudson.model.User;
import hudson.model.Cause;
import hudson.model.Cause.UserIdCause;

def cause = build.getCause(hudson.model.Cause$UserIdCause)
def id = cause.getUserId()
User u = User.get(id)
def umail = u.getProperty(Mailer.UserProperty.class)
print umail.getAddress()

Upvotes: 3

Modzful
Modzful

Reputation: 177

If you have access to the build variable in the Java code of your plugin (for instance in the setUp() method of the class that extends BuildWrapper), you can get the currently logged user this way :

@Override
public MyJenkinsPlugin setUp(AbstractBuild build, Launcher launcher, BuildListener listener)

    String connectedUser = build.getCause(Cause.UserIdCause.class).getUserId();
    String mail = User.get(connectedUser.getProperty(hudson.tasks.Mailer.UserProperty.class).getEmailAddress()
...
}

I have not been able to get the logged user using User.current().getId(), it always returned me 'SYSTEM'.

Hope it helps!

Upvotes: 2

satrun77
satrun77

Reputation: 3220

You can access the object of the current user with the method current()

def user = hudson.model.User.current();

The email address can be retrieved in the same way as to what you have done in your answer.

print user.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress();

Upvotes: 10

mipmip
mipmip

Reputation: 1160

I found a way:

import hudson.model.AbstractProject
import hudson.tasks.Mailer
import hudson.model.User

def item = hudson.model.Hudson.instance.getItem(env.JOB_NAME) 
def build = item.getLastBuild()
def cause = build.getCause(hudson.model.Cause.UserIdCause.class)
def id = cause.getUserId()
User u = User.get(id)
def umail = u.getProperty(Mailer.UserProperty.class)
print umail.getAddress()

Upvotes: 25

Related Questions