【问题标题】:Developing Jenkins post-build plugin开发 Jenkins 构建后插件
【发布时间】:2024-04-10 12:55:01
【问题描述】:

我目前正在开发一个从 Jenkins 构建中检索结果的简单插件。我正在扩展通知程序并使用build.getResults() 来获取信息。但是,当我上传插件时,我无法将其设置为构建后操作。
当我运行我的构建时,它们会在build.getResults() 上中断,因为我试图在构建仍在运行时获得结果。

我该怎么做才能正确获得构建结果?

【问题讨论】:

    标签: java jenkins hudson jenkins-plugins post-build


    【解决方案1】:

    最好看existing plugins which use Notifier extension point(点击展开实现插件列表)。

    检查您是否具有描述符实现(内部)类以及 config.jelly。还要检查 jenkins.out 和 jenkins.err 日志是否有任何异常(例如格式错误的 config.jelly)。

    编辑:实际上,这个插件的 Notifier 子类看起来非常简单,就像 Notifiers 一样:https://wiki.jenkins-ci.org/display/JENKINS/The+Continuous+Integration+Game+plugin,尤其是它的GamePublisher.java 和相应的config.jelly,它是GameDescriptor.java,它已经成为一个完整的外部类(通常描述符是内部类)。此外,如果您想在 Jenkins 的全局配置中添加选项,则需要 global.jelly,但如果您没有此类选项,则可以省略(与 config.jelly 不同,Notifier 必须拥有它,即使它是空的,就像这里一样)。

    作为一般说明,当事情不工作时真的很烦人,并且您没有收到任何错误,詹金斯根本不会显示您的东西......如果您只想让事情为您工作,使用 Groovy 构建步骤可能会更容易,但如果您想让事情为他人工作,那么做一个像样的完整插件会减少支持请求。

    【讨论】:

      【解决方案2】:

      既然这听起来很简单,你确定你需要一个插件吗?看看改用Groovy Postbuild step;它们更容易编写。链接中有一些很好的用法示例。如果你决定你真的需要一个插件,看看你是否可以扩展现有的而不是自己编写;这是一种更容易理解 Jenkins 插件编写的来龙去脉的方法。

      【讨论】:

      • 我一直在使用 Groovy Postbuild 插件来调用安全的 Web 服务(由 Coverity Connect 6.5.3 公开),并且遇到了整个 Jenkins JVM 耗尽 PermGen(JDK 1.7 更新)的问题15)。到目前为止,Groovy Postbuild 插件在调用 SonarQube 的 REST 服务方面运行良好。总之,请注意 Groovy Postbuild 插件可能有限制。
      • 在建议使用现有插件之前,此答案应提供如何执行此操作的示例。
      • @JohnZeller 我提供的链接中有很多用法示例,但我已经编辑了答案以使其更清晰。