How to get e-mail address of current Jenkins user

2019-04-06 03:38发布

问题:

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?

回答1:

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()


回答2:

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();


回答3:

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;


回答4:

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!



回答5:

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()