Jenkins Pipeline currentBuild.changeSets并检索每个存储库的电子邮件

Nat*_*han 2 jenkins jenkins-pipeline

我有一个jenkins管道工作,检查3个存储库.

当构建失败时,根据失败的位置,我想向开发人员发送电子邮件,导致上次提交/更改.

我可以使用以下方法检索作者fullNames:

    def changeSet = script.currentBuild.changeSets[0];
    Set authors = [];
    if (changeSet != null) {
        for (change in changeSet.items) {
            authors.add(change.author.fullName)
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚:

  1. 我怎样才能让作者收到电子邮件?
  2. 如何区分不同存储库的作者?

MET*_*IJI 7

在此处查看更多信息: 如何获取当前Jenkins用户在groovy脚本中使用的电子邮件地址

echo 'author email:' + change.author.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress()
Run Code Online (Sandbox Code Playgroud)

但它需要禁用groovy沙箱:(

可能已将解决方案添加到Jenkins Pipeline共享库中:https://jenkins.io/doc/book/pipeline/shared-libraries/

像这样:

$ cat GetUserEmail.groovy 
#!/usr/bin/groovy

def call(body) {
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()

    def User = config.get('user')
    return User.getProperty(hudson.tasks.Mailer.UserProperty.class).getAddress()
}
Run Code Online (Sandbox Code Playgroud)

并使用这样的:

def changeSet = script.currentBuild.changeSets[0];
Set authors = [];
if (changeSet != null) {
    for (change in changeSet.items) {
        authors.add(GetUserEmail{user=change.author})
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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;
Run Code Online (Sandbox Code Playgroud)