Программно выбрать парсеры WarningNext Generation из списка строк - PullRequest
0 голосов
/ 25 июня 2019

Как мне передать 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 ...
   }

Это гарантирует, что мы всегда будем пытаться запустить парсеры, даже если модульные тесты не пройдут сборку. Я понимаю, что парсеры не запускаются при ошибке компиляции.

Я знаю, что мог бы сделать это через Декларативный конвейер. Тем не менее, различные процедуры, которые мы используем, ведут себя неправильно, когда мы пытаемся такой подход. По мере того как мы переносим больше логики сборки в декларацию sharedLibrary, она может стать более полезной. В настоящее время я хотел бы сделать это в стандартном конвейере.

1 Ответ

0 голосов
/ 25 июня 2019

Мы можем передать строку и легко выполнить ее как функцию через

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
}
...