Как получить адрес электронной почты текущего пользователя Jenkins для использования в скрипте groovy

Я создал отличный скрипт для нового плагина рабочего процесса Jenkins, https://github.com/jenkinsci/workflow-plugin. Я хочу, чтобы он отправлял письмо пользователю, который запустил задание, когда ему нужно ввести данные для следующего шага. Я пытался найти API, но ничего не могу найти о получении адреса электронной почты пользователя.

Я бы подумал о чем-то подобном.

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

Есть ли способ получить адрес текущего пользователя Jenkins в groovy?


person mipmip    schedule 20.01.2015    source источник


Ответы (5)


Я нашел путь:

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()
person mipmip    schedule 20.01.2015
comment
Начиная с версии 1.4 вы должны использовать currentBuild.rawBuild, а не искать задание и запрашивать его lastBuild. - person Jesse Glick; 02.04.2015

Вы можете получить доступ к объекту текущего пользователя с помощью метода current()

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

Адрес электронной почты можно получить так же, как вы сделали в своем ответе.

print user.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress();
person satrun77    schedule 21.01.2015
comment
В подключаемом модуле рабочего процесса задание hudson.model.User.current(); возвращает пользователя SYSTEM. Не тот пользователь, который запустил сборку. В нашей установке SYSTEM не имеет почтового адреса, поэтому возвращается ноль. - person mipmip; 26.01.2015
comment
Ага. Я рад, что это улажено :) - person mipmip; 27.01.2015
comment
Все еще голосую, так как мне нужен был именно этот - для установки значений по умолчанию для параметризованных сборок. - person akostadinov; 06.04.2016
comment
Благодаря тонну. Вы сэкономили мне часы исследований. - person Varun Chandak; 17.06.2020

Если у вас есть доступ к переменной build в коде Java вашего плагина (например, в методе setUp() класса, который расширяет BuildWrapper), вы можете получить текущего зарегистрированного пользователя следующим образом:

@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()
...
}

Мне не удалось получить зарегистрированного пользователя с помощью User.current().getId(), он всегда возвращал мне «SYSTEM».

Надеюсь, поможет!

person Modzful    schedule 10.01.2017

Вы можете получить имя автора, а затем использовать его для примера в реестре рассылки или что-то в этом роде:

 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;
person Mohamed Amine Kharrez    schedule 14.01.2019

Вы можете использовать следующую процедуру:

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()
}
person Maxim Suslov    schedule 27.05.2020