如何在具有一个或多个SCM的Jenkins工作流中找到罪犯或提交者

如何在具有一个或多个SCM的Jenkins工作流中找到罪犯或提交者,jenkins,version-control,jenkins-workflow,jenkins-pipeline,Jenkins,Version Control,Jenkins Workflow,Jenkins Pipeline,从一个或多个SCM签出时(通过checkout()或git/svn等其他SCM步骤),是否可以访问有关Jenkins工作流作业的提交者和/或罪犯的信息 其目的是使用该信息通知提交者和/或罪犯作业状态,例如在邮件步骤中 工作流定义的一个小示例: node { // checkout from one or more SCMs, e.g. git url: '<URL>' checkout([$class:...]) ... // how can we know

从一个或多个SCM签出时(通过checkout()或git/svn等其他SCM步骤),是否可以访问有关Jenkins工作流作业的提交者和/或罪犯的信息

其目的是使用该信息通知提交者和/或罪犯作业状态,例如在
邮件
步骤中

工作流定义的一个小示例:

node {
  // checkout from one or more SCMs, e.g.
  git url: '<URL>' 
  checkout([$class:...])
  ...

  // how can we know about committers or culprits at this point?
  $committers = ??

  // send a mail to committers or culprits
  mail to: '$committers', subject: 'JENKINS', body: '<information about the job status>'
}
节点{
//从一个或多个SCM签出,例如。
git url:“”
签出([$class:…]))
...
//在这一点上,我们如何知道提交者或罪犯?
$committers=??
//向提交者或罪犯发送邮件
邮件收件人:“$committers”,主题:'JENKINS',正文:'
}
在运行SCM步骤后,如何调整此方法以获得提交者的集合

编辑:
我目前正在使用Jenkins 1.596.2版和Workflow:Aggregator 1.6版,这似乎是

中的一个公开问题。如果您想通知破坏构建的罪犯,您无需进行任何检查,请使用Jenkins中的电子邮件插件。这个插件让你可以选择在过去的良好构建和当前的坏构建之间向提交者发送邮件

如果您使用“可编辑电子邮件通知插件”,您可以选择向罪犯发送邮件


如果您使用的是电子邮件插件,那么您可以选择“向破坏构建的个人发送单独的电子邮件”。

您可以获取作业的xml信息,在该信息中,您可以找到提交更改的人的姓名以及提交消息

http://<Jenkins URL>:<Port Number>/job/<Jobname>/<BuildNumber>/api/xml?
http://:/job///api/xml?
在浏览器中尝试一下。搜索“用户”。
您可以将此信息转储到要处理的文本文件中。

正如您所发现的,暂挂不支持此操作。需要对Jenkins core进行更改。

这项功能似乎是在email ext插件中实现的,但作者忘了记录我们应该如何使用它


请检查--并在此处添加注释,询问示例。我已经这样做了。

现在可以使用该插件

但是,如果您只想在出现故障时发送电子邮件,则可能需要使用Mailer(基于):


在管道脚本中使用groovy:

@NonCPS  // Necessary to allow .each to work.
def changelist() {
    def changes = ""
    currentBuild.changeSets.each { set ->
        set.each { entry ->
            changes += "${entry.commitId} by ${entry.author.fullName}\n"
        }
    }
    changes
}

与@szym的答案类似,但没有要求的
@NonCPS


def authors=currentBuild.changeSets.collectMany{it.toList().collect{it.author}.unique()

您可以获取提交者的电子邮件:

committerEmail = sh (
  script: 'git --no-pager show -s --format=\'%ae\'',
  returnStdout: true
).trim()
并发送:

emailext body: 'text you choose', subject: 'subject you choose', recipientProviders: [[$class: 'DevelopersRecipientProvider']], to: committerEmail

摘自:

嗨,谢谢你的回复。澄清一下:我使用的是带有可编辑电子邮件通知插件的自由式作业。现在我切换到工作流作业,在这里我目前看不到任何包含此功能的选项。我看到的唯一选项是常规邮件步骤,在该步骤中我可以指定电子邮件的收件人。在这里,我希望能够发送给破坏构建的提交者。你知道这是否可能吗?你能找到解决这个问题的办法吗?这似乎是迁移到管道的真正破坏者。如果无法从工作流中获取提交者列表,是否可以编写插件步骤来完成此操作?我该如何开始编写这样一个插件步骤呢?看来问题的答案已经解决了。有人知道如何实施吗?Jesse,你联系的问题最近已经解决了。您是否有可能更新您的答案以显示如何使用最新版本的管道/工作流插件获取提交者?它不应该是
@NonCPS
而不是
@NoCPS
?!您的第二个示例(
步骤(…)
)对我适用,但奇怪的是,它没有使用在中配置的默认内容https:///configure 我收到的邮件以See开头,然后是指向blue ocean build的链接。我期待的是经典版本的构建。想法?@firepol我相信Jenkins插件可以覆盖构建URL。我知道蓝海最近很忙。
committerEmail = sh (
  script: 'git --no-pager show -s --format=\'%ae\'',
  returnStdout: true
).trim()
emailext body: 'text you choose', subject: 'subject you choose', recipientProviders: [[$class: 'DevelopersRecipientProvider']], to: committerEmail