我尝试为TeamCity创建自定义Notificator
插件,当我们的某个版本失败时,该插件会向我的团队Slack实例发送消息。
我们能够让它运行,并按预期发送消息。当我们尝试查询传递到SRunningBuild
方法实现中的notifyBuildFailed
以查找失败原因列表时,会出现此问题。当我们不尝试此操作时,将按预期显示失败消息。当我们尝试提取失败原因列表时,不会显示该消息,据我们所知,日志中没有异常。
这是我们代码的摘录:
public void notifyBuildFailed(@NotNull SRunningBuild build, @NotNull Set<SUser> users) {
String concatenatedFailureReasons =
getConcatenatedFailureReasons(build.getFailureReasons());
sendNotification("Build failed for the following reasons:\n" +
concatenatedFailureReasons, users);
}
private String getConcatenatedFailureReasons(List<BuildProblemData> reasons) {
String concatenatedFailureReasons = "";
for (BuildProblemData buildProblemData : reasons) {
concatenatedFailureReasons += buildProblemData.getDescription();
}
return concatenatedFailureReasons;
}
据我所知,失败实际上是在调用build.getFailureReasons()
时发生的,因为当我使getConcatenatedFailureReasons
方法只返回一个空字符串时,它仍然无法正确显示消息。
由于我认为是TeamCity插件开发的本质,实际调试此问题很难。如果有人有一个很好的方法来介绍TeamCity插件代码,我很乐意听到这个。