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

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

Я хотел бы думать о чем-то вроде этого.

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

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

4 ответа

Я нашел путь:

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

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

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

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

print user.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress();
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()

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

 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;

Если у вас есть доступ к 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".

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

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

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()
}
Другие вопросы по тегам