Reputation: 1160
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
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
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
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
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
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
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
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