используя 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 у меня есть аналогичный код в файле 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, поэтому не уверен, как это адаптировать, поэтому среда выполнения будет делать то, что я хочу.
Я смотрел на вывод консоли, значит, он должен быть там, но его нет. Похоже, проблема в том, может ли выделенный код совместно использовать «контекст»?
Вам нужно импортировать класс при вызове метода из другие файлы
Make a directory at the same level as the DSL called utilities and create a file called MyUtilities.groovy in the utilities directory with the following contents:
package utilities class MyUtilities { static void addMyFeature(def job) { job.with { description('Arbitrary feature') } } }
Then from the DSL, add something like this:
import utilities.MyUtilities
Так показывает ли этот пример кода, что у вас может быть общий/общий код Jenkins DSL? Например scm, configure, logRotator?
В каких журналах вы ищете вывод, вывод консоли из задания или системный журнал jenkins? Дженкинс перехватывает println и отправляет его на задание «консольный вывод», однако System.out все равно будет писать в журнал сервера.