[英]Setting Jenkins to email a build notification to the BitBucket user who pushed a branch
项目存储库已使用BitBucket 插件成功连接到 Jenkins 服务器,并且项目设置为:
**
)只需按照插件中的说明和一些快速的 Google 搜索,即可轻松设置其中的每一个。 但是,我现在遇到了一个问题,这可能更多是想要以非常规方式运行而不是其他任何问题。
使用普通的 emailer 插件或 Email-ext 插件,可以设置电子邮件以发送给参与构建创建的人员。 例如,Email-ext 插件允许选择:
所遵循的开发过程涉及由一个开发人员在命名分支中处理的每个项目,例如userA/projectB
。 显然,其他开发人员可以检查出来并推动进行更改,但这是不受欢迎的。 即使在这种情况下,也应该通知将更改推送到 BitBucket 的用户。
当前的设置都不支持这一点。 Requester是最接近的,但这仅适用于手动构建。 触发构建的推送到 SCM 应该通知推送的用户似乎是一个非常简单的要求,但这没有记录在任何容易找到的地方。
经过大量搜索,似乎唯一的方法是使用Pre-send script 。 这被添加到Email-ext post-build 步骤的Advanced设置中,并采用用Java 扩展Groovy编写的代码形式。
该脚本可以利用环境变量,但很难测试,因为无法在这些变量就位的情况下运行脚本。 您可以从Home -> Manage Jenkins -> Script console
测试简单的 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 脚本的容器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.