5

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

目的是使用该信息通知提交者和/或罪魁祸首有关作业状态的信息,例如在一个mail步骤中。

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

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 步骤后如何调整它以获取提交者的集合?

编辑:我目前正在使用 Jenkins 版本 1.596.2 和 Workflow: Aggregator 版本 1.6,这似乎是 JENKINS-24141中的一个未解决问题

4

9 回答 9

10

现在可以使用email-ext插件。

def to = emailextrecipients([[$class: 'CulpritsRecipientProvider'],
                             [$class: 'DevelopersRecipientProvider'],
                             [$class: 'RequesterRecipientProvider']])
if (to != null && !to.isEmpty()) {
    mail to: to, subject: "JENKINS", body: "See ${env.BUILD_URL}"
}

但是,如果您只想发送失败的电子邮件,您可能需要使用 Mailer(基于email-ext 管道示例):

step([$class: 'Mailer',
      notifyEveryUnstableBuild: true,
      recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'],
                                      [$class: 'RequesterRecipientProvider']])])
于 2016-09-16T15:43:06.983 回答
6

在管道脚本中使用 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
}
于 2017-02-08T00:27:17.777 回答
4

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

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

于 2018-03-01T18:07:36.210 回答
2

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

http://<Jenkins URL>:<Port Number>/job/<Jobname>/<BuildNumber>/api/xml?

在您的浏览器中试一试。搜索“用户”。您可以将此信息转储到文本文件中以进行处理。

于 2015-05-25T06:09:57.033 回答
2

如您所见,不支持待处理的 JENKINS-24141 。需要更改 Jenkins 核心。

于 2015-06-04T17:03:11.547 回答
1

似乎这个功能是在 email-ext 插件中实现的,但是作者忘记记录我们应该使用它的方式。

请检查https://issues.jenkins-ci.org/browse/JENKINS-34763 - 并在此处添加评论,询问示例。我已经做了。

于 2016-06-21T16:41:52.440 回答
0

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

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

取自:https ://medium.com/@dilunika/find-the-git-commit-user-jenkins-pipeline-b6790613f8b5

于 2018-04-12T08:53:34.543 回答
0

emailext插件中,您可以直接提供罪魁祸首开发者请求者recipientProviders

emailext body: '', 
recipientProviders: [culprits(),
 developers(),
 brokenBuildSuspects(), 
 brokenTestsSuspects(), 
 requestor()], 
subject: ''

描述

罪魁祸首:将电子邮件发送到自上次未损坏的构建到现在提交更改的用户列表。此列表至少总是包含在此构建中进行更改的人员,但如果之前的构建失败,它还包括那里的罪魁祸首列表。

开发人员: 向所有导致更改集更改的人员发送电子邮件。

损坏的构建嫌疑人: 向怀疑导致构建开始失败的用户列表发送电子邮件。

损坏的测试嫌疑人:向怀疑导致单元测试开始失败的用户列表发送电子邮件。此列表包括测试开始失败的构建的提交者和请求者,以及测试开始失败的构建之前任何连续失败的构建的提交者和请求者。

来源: Jenkins Pipeline Syntax - Snippet Generator

于 2021-07-15T04:54:33.507 回答
-2

如果你想通知破坏构建的罪魁祸首,你不需要任何检查,使用 jenkins 中的电子邮件插件。该插件使您可以选择在过去的良好构建和当前损坏的构建之间向提交者发送邮件。

如果您使用的是“可编辑的电子邮件通知插件”,您可以选择将邮件发送给罪魁祸首。

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

于 2015-05-24T20:02:08.410 回答