基本上我继承了ShellCommand来覆盖evaluatecommand。 在evaluatecommand中,我解析日志并找到包的实际维护者以发送邮件通知。
除了邮件通知之外的所有内容都无法正常工作。
class CustomShellCommand(ShellCommand):
command = None
parser = None
haltOnFailure = True
buildername = ''
ci = None
def __init__(self,command, ci, buildername, **kwargs):
self.ci = ci
self.command = command
self.buildername = buildername
ShellCommand.__init__(self, **kwargs)
if len(self.command) > 0 and self.command[0] == 'make_isolated':
self.parser = ParseLog()
self.addLogObserver('stdio', self.parser)
self.setDefaultWorkdir("build")
def evaluateCommand(self, cmd):
if self.parser is not None:
self.parser.packages
for pkg in self.parser.packages:
emails = get_maintainer_emails()
if cmd.rc > 0:
mn = add_mail_notifiers([self.buildername], emails[-1])
self.ci.masterconfig['services'].append(mn)
return util.FAILURE
else:
return util.SUCCESS
但是当我在 init 中添加邮件通知程序时,它可以正常工作,但在evaluate命令中不起作用。 任何指针都会受到赞赏。
答案 0 :(得分:1)
我不是buildbot专家,我刚刚开始在我的新工作中使用它。但在这里我认为MailNotifier与主服务器相关,更准确地说与配置相关。对于ShellCommand
,我认为主服务器在加载其配置时执行__init__
。但我认为evaluateCommand
只能在运行时由奴隶执行,而且他们无法改变主人的配置......
这里我们编写了一个外部脚本来发送失败构建的个性化邮件。它有一个建筑师,每天一次,每天早上在夜间建筑完成之后和人们到达办公室之前触发它。我们将调查如何更普遍地这样做,因为我们的项目中只有一个具有此功能,其他项目的失败在发送给每个人的一般邮件中汇总。也许与SetProperty
有关,但我现在还不知道......