14

我为新的 Jenkins 工作流插件创建了一个 groovy 脚本,https://github.com/jenkinsci/workflow-plugin。我希望它在下一步需要输入时向开始工作的用户发送邮件。我尝试搜索 API,但找不到任何有关获取用户电子邮件地址的信息。

我会想到这样的事情。

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

有没有办法在 groovy 中获取当前 Jenkins 用户的地址?

4

6 回答 6

20

我找到了一个方法:

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()
于 2015-01-20T18:13:08.853 回答
10

可以通过方法访问当前用户的对象current()

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

可以通过与您在回答中所做的相同的方式来检索电子邮件地址。

print user.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress();
于 2015-01-21T20:27:58.293 回答
3
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()
于 2017-12-05T14:47:50.310 回答
2

您可以获取作者姓名,然后将其用作邮件注册表或类似内容的示例:

 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;
于 2019-01-14T11:16:02.980 回答
2

如果您可以访问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'。

希望能帮助到你!

于 2017-01-10T08:59:52.780 回答
0

您可以使用以下例程:

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()
}
于 2020-05-27T09:26:54.590 回答