Как использовать общие методы groovy в контексте плагина Jenkins Job DSL

#jenkins #groovy

#дженкинс #groovy

Вопрос:

используя GroovyConsole, у меня есть файл main.groovy с:

 new Helpers().test("test method called")
  

и в том же каталоге есть файл Helpers.groovy с содержимым

 def test(String str) {
    println "test method called with: "   str
}
  

Запуск приводит к результатам:

 groovy> new Helpers().test("test method called") 

test method called with: test method called
  

Однако в контексте Jenkins, использующего DSL, у меня есть аналогичный код в file generator.groovy:

 new Helpers().test("test method called")
  

затем в Helpers.groovy в том же каталоге у меня есть:

 def test(String str) {
    println("test method called on: "   str)
}
  

Однако, когда я запускаю, я не получаю никаких выходных данных (из println) в журналах.
Если вместо этого у меня есть мои def в том же файле main.groovy, он работает нормально.

Вероятно, отсутствует что-то фундаментальное. В jenkins он компилируется / зеленый, поэтому не уверен, как это адаптировать, поэтому среда выполнения будет делать то, что я хочу.

Комментарии:

1. В каких журналах вы ищете выходные данные, в консольных выходных данных задания или в системном журнале jenkins? Дженкинс перехватывает println и отправляет его в задание «консольный вывод», однако System.out все равно будет записывать данные в журнал сервера

2. Я смотрел на вывод на консоль, так что тогда он должен быть там, но его нет. Похоже, проблема связана с тем, может ли выделенный код совместно использовать «контекст», возможно?

Ответ №1:

Вам необходимо импортировать класс при вызове метода из других файлов

Создайте каталог того же уровня, что и утилиты DSL, и создайте файл с именем MyUtilities.groovy в каталоге utilities со следующим содержимым:

 package utilities

class MyUtilities {
    static void addMyFeature(def job) {
        job.with {
            description('Arbitrary feature')
        }
    }
}
  

Затем из DSL добавьте что-то вроде этого:

 import utilities.MyUtilities
  

Комментарии:

1. Итак, этот пример кода показывает, что у вас может быть общий код Jenkins DSL? Например, scm, configure, logRotator?