#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?