web-dev-qa-db-ja.com

groovyスクリプトで使用する現在のJenkinsユーザーの電子メールアドレスを取得する方法

新しいJenkinsワークフロープラグイン用のGroovyスクリプトを作成しました https://github.com/jenkinsci/workflow-plugin 。次のステップで入力が必要になったときに、ジョブを開始したユーザーにメールを送信したいと思います。 APIを検索しようとしましたが、ユーザーのメールアドレスを取得する方法が見つかりません。

こんな感じだと思います。

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

Groovyで現在のJenkinsユーザーのアドレスを取得する方法はありますか?

11
mipmip

私は方法を発見しました:

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

メソッドcurrent()を使用して、現在のユーザーのオブジェクトにアクセスできます。

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

メールアドレスは、回答で行ったのと同じ方法で取得できます。

print user.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress();
7
satrun77

作成者名を取得して、それをメーリングレジストリなどの例に使用できます。

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

プラグインのJavaコード(たとえば、buildを拡張するクラスの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」が返されました。

それが役に立てば幸い!

1
Modzful