如何使用一个或多个SCM在Jenkins工作流中获取罪魁祸首或提交者

Den*_*izU 6 version-control jenkins jenkins-workflow jenkins-pipeline

从一个或多个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>'
}
Run Code Online (Sandbox Code Playgroud)

在运行SCM步骤之后,如何调整它以获取提交者的集合?

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

Wil*_*hes 7

现在可以使用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}"
}
Run Code Online (Sandbox Code Playgroud)

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

step([$class: 'Mailer',
      notifyEveryUnstableBuild: true,
      recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'],
                                      [$class: 'RequesterRecipientProvider']])])
Run Code Online (Sandbox Code Playgroud)


szy*_*zym 5

在管道脚本中使用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
}
Run Code Online (Sandbox Code Playgroud)


Tor*_*err 5

与 @szym 的答案类似,但没有@NonCPS必需的:

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


Jes*_*ick 2

正如您所发现的,待决的JENKINS-24141不支持此功能。需要对 Jenkins 核心进行更改。