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

时间:2015-05-22 13:49:19

标签: jenkins version-control 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>'
}

如何在运行SCM步骤后对其进行调整以获取提交者的集合?

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

9 个答案:

答案 0 :(得分: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}"
}

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

step([$class: 'Mailer',
      notifyEveryUnstableBuild: true,
      recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'],
                                      [$class: 'RequesterRecipientProvider']])])

答案 1 :(得分:4)

在管道脚本中使用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
}

答案 2 :(得分:2)

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

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

在浏览器中添加一下。搜索&#34;用户&#34;。 您可以将此信息转储到文本文件中进行处理。

答案 3 :(得分:2)

如您所见,等待JENKINS-24141这不受支持。需要对Jenkins核心进行更改。

答案 4 :(得分:1)

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

请检查https://issues.jenkins-ci.org/browse/JENKINS-34763 - 并在那里添加评论,并要求举例。我已经做了。

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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

SELECT p.id_public,tp.time_post,p.access_token,p.text_send  
FROM time_post tp 
INNER JOIN public p
ON tp.id_public=p.id
INNER JOIN 
(SELECT MAX(id) AS id FROM time_post GROUP BY id_public) AS T
ON tp.id=T.id
ORDER BY p.id_public 

并发送:

id_public   time_post   access_token    text_send
9876        2           1234            (null)
12345       1           12345           (null)
22222       2           (null)          (null)

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

答案 7 :(得分:0)

emailext 插件中,您可以直接在 recipientProviders 中提供 culpritdevelopersrequestor 等。

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

说明

罪魁祸首: 向自上次未损坏的构建以来提交更改的用户列表发送电子邮件。此列表至少始终包括在此构建中进行更改的人员,但如果前一个构建失败,则它也包括从那里开始的罪魁祸首列表。

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

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

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

来源: Jenkins 管道语法 - 代码段生成器

答案 8 :(得分:-2)

如果您想通知打破构建的匪徒,您不需要进行任何检查,在jenkins中使用电子邮件插件。这个插件为您提供了在过去的良好构建和当前破坏的构建之间将邮件发送到提交者的选项。

如果您正在使用&#34;可编辑的电子邮件通知程序插件&#34;您可以选择将邮件发送给罪魁祸首。

如果您正在使用电子邮件插件,那么您将获得选项&#34;向打破构建的个人发送单独的电子邮件&#34;。