将Jenkins设置为通过电子邮件向推送分支的BitBucket用户发送生成通知

将Jenkins设置为通过电子邮件向推送分支的BitBucket用户发送生成通知,jenkins,continuous-integration,bitbucket,bcbsn,Jenkins,Continuous Integration,Bitbucket,Bcbsn,项目存储库已使用成功连接到Jenkins服务器,并且项目设置如下: 每次推送到BitBucket中的分支都会触发发送到Jenkins服务器的webhook 当Jenkins服务器收到webhook时,它将构建更改的分支(通过在配置中将分支名称指定为**) 生成完成后,将使用 每一个都很容易设置,只需插件中的说明和几个快速谷歌。然而,我现在遇到了一个问题,这可能更多的是想以一种非传统的方式跑步,而不是其他方式 使用普通的emailer插件或Email ext插件,可以设置发送给参与创建构建的人

项目存储库已使用成功连接到Jenkins服务器,并且项目设置如下:

  • 每次推送到BitBucket中的分支都会触发发送到Jenkins服务器的webhook
  • 当Jenkins服务器收到webhook时,它将构建更改的分支(通过在配置中将分支名称指定为
    **
  • 生成完成后,将使用
每一个都很容易设置,只需插件中的说明和几个快速谷歌。然而,我现在遇到了一个问题,这可能更多的是想以一种非传统的方式跑步,而不是其他方式

使用普通的emailer插件或Email ext插件,可以设置发送给参与创建构建的人员的电子邮件。例如,Email ext插件允许选择:

  • 请求者
  • 开发人员(在基于上一版本的构建中进行提交的所有人员)
  • 收件人列表(预设列表)
  • 针对损坏的构建的各种“责备”设置
所遵循的开发过程包括每个项目都由一个指定分支中的一名开发人员进行开发,例如
userA/projectB
。显然,其他开发人员可以检查并推动进行更改,但这是不赞成的。即使在这种情况下,也应该通知将更改推送到BitBucket的用户


当前设置均不支持此操作。请求者是最接近的,但这只适用于手动构建。触发构建的推送到SCM应该通知推送的用户,这似乎是一个非常简单的要求,但这在任何容易找到的地方都没有记录。

经过大量搜索后,似乎实现这一点的唯一方法是使用预发送脚本。这被添加到Email-ext-post-build步骤的高级设置中,并采用Java扩展编写的代码形式

脚本可以利用环境变量,但很难测试,因为无法在这些变量存在的情况下运行脚本。您可以从
Home->managejenkins->scriptconsole
测试简单的Groovy脚本

环境变量的一个重要的“问题”是它们被“包含”在脚本中,而不是变量或常量中。例如,在脚本编译和运行之前,将粘贴变量的内容以代替其
$NAME
。在下面的示例中,多行字符串语法用于包括BitBicket有效负载,而
def payload=$BITBUCKET_payload
可能只起作用

import javax.mail.Message.RecipientType
import javax.mail.Address
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
import groovy.json.JsonSlurper

def jsonSlurper = new JsonSlurper()

def bitbucket = jsonSlurper.parseText('''
   $BITBUCKET_PAYLOAD'''
)

switch (bitbucket.actor.username){
  case "userA":
    msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse("user.a@domain.com"));
  break;
  case "userB":
    msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse("user.b@domain.com"));
  break;
}
setRecipients
命令覆盖任何现有收件人。因此,如果用户未被识别,则应将收件人列表或其他电子邮件配置设置为备用设置。此外,如果没有选择要向其发送电子邮件的人,则脚本根本不会运行。添加调试后,在正文中包含用户名可能会有所帮助


如果脚本失败,堆栈跟踪应该打印到测试的控制台日志输出中,并且构建通过/失败不应该受到影响,但是将使用正常的电子邮件地址设置。在堆栈跟踪中查找包含
Script()
的行,因为这是计算Groovy脚本的容器。

在Git中没有什么比推送器更好的了,因为远程repo与任何其他repo一样:它只包含提交者提交的提交(唯一的例外是它可能是一个提交者)。这就是Git是DCV的原因。您会用什么术语来描述将一组提交从其存储库推送到远程存储库的人?BitBucket使用术语
actor
,但这似乎相当通用。对我来说,Pusher是描述那个人最清晰的方式。从工作流的角度看,你是对的。但是Git本身并没有一个推动者的概念。它只是知道而已。