从字符串列表中以编程方式选择WarningNextGeneration解析器

时间:2019-06-25 18:42:09

标签: jenkins-pipeline jenkins-plugins

如何向Warnings Next Generation Plugin提供一系列将激活解析器的字符串?

我想在共享库中使用一个通用方法,如下所示:

  def withWarningNG(def listOfParsers, closure) {
    def result
    try {
      result = closure()
    } finally {
      recordIssues(tools: listOfParsers)
    }
    return result
  }


// And use it in various Jenkinsfiles thus:

 node() {
   mySharedLibVar.withWarningNG(['gcc', 'java']) {
     ... do something ...
   }

这将确保即使单元测试未能通过构建,我们也始终尝试运行解析器。我意识到解析器不会在出现编译错误时运行。

我知道我可以通过 Declarative 管道来做到这一点。但是,当尝试这种方法时,我们会使用各种异常行为。随着我们将更多构建逻辑迁移到sharedLibrary声明中,可能会变得更加有用。目前,我想在标准管道中执行此操作。

1 个答案:

答案 0 :(得分:0)

我们可以通过以下方式传递字符串并将其作为函数轻松执行

def foo() { return "bar"}

def myFunction="foo"

"${foo}"()

因此,我们可以创建一个像这样的方法来接受分析器列表。

/**
 * Run a set of WarningsNextGeneration analyzers
 * @param analyzersList  list of strings mapping to https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md
 * @param closure jenkins pipeline code to execute
 * @return result of that pipeline code
 */
def withWarningNG(def analyzersList, closure) {
    def result
    try {
        result = closure()
    } finally {
        for (analyzer in analyzersList) {
            println "Configure Recorder for ${analyzer}"
            recordIssues(tools: ["${analyzer}"()], enabledForFailure: true)
        }
    }
    return result
}