Почему Jenkins Job DSL работает с предоставленным сценарием, но не работает со сценарием файловой системы?

У меня есть отличный скрипт для создания папок для моего сервера Jenkins. Плагин папок установлен и работает. Я также установил плагин Job DSL и создал задание Seed. Существует 2 варианта предоставления кода Groovy DSL. 1. Используйте предоставленный сценарий DSL или 2. Посмотрите на файловую систему.

Если я использую вариант 1 и предоставлю этот скрипт, он отлично работает, и я вижу папки:

def folders = '''
Active Folder
Active Folder/DqCpi
Active Folder/DqCtlRent
Active Folder/DqFileBox
'''

def folderList = folders.tokenize('\n')

for (folderName in folderList) {
    folder(folderName)
}

Все идет нормально.

Я сохраняю этот код в Folders.groovy внутри папки рабочей области исходного задания, затем пробую вариант 2.

Это не удается, и сообщение об ошибке в консоли:

Processing DSL script Folders.groovy
ERROR: (Folders.groovy, line 1) No signature of method: Folders.?def() is applicable for argument types: (java.lang.String) values: [
Active Folder
Active Folder/DqCpi
Active Folder/DqCtlRent
Active Folder/DqFileBox
]
Possible solutions: grep(), folder(java.lang.String), job(java.lang.String), queue(java.lang.String), use([Ljava.lang.Object;), grep(java.lang.Object)
Finished: FAILURE

Файл Folders.groovy сохраняется в формате UTF8.

Почему встроенная версия работает, а файловая не работает?


person Matthew MacFarland    schedule 29.11.2015    source источник
comment
Я не могу воспроизвести вашу проблему. Какую версию Jenkins и плагин Job DSL вы используете? Является ли Folders.groovy единственным скриптом, который вы запускаете?   -  person daspilker    schedule 30.11.2015
comment
@daspilker - Моя версия Jenkins — 1.617, а плагин Job DSL — версия 1.40. В этом случае я использую только Folders.groovy.   -  person Matthew MacFarland    schedule 30.11.2015
comment
@daspilker - я подумал, что, возможно, версия Groovy устарела, поскольку Дженкинс перечисляет Groovy 1.8.9 на странице «О Jekins», и я думаю, что Groovy доступна в более поздней версии. Последняя версия Jenkins, похоже, использует ту же версию Groovy 1.8.9. Я все равно обновлю Jenkins на случай несовместимости между моей версией Jenkins и плагином.   -  person Matthew MacFarland    schedule 30.11.2015


Ответы (1)


Похоже, это связано с кодировкой файла сценария. Мой текстовый редактор Notepad++ сохранил файл Folders.groovy в кодировке UTF8.

Затем я заметил на странице свойств системы Jenkins следующую настройку sun.io.unicode.encoding UnicodeLittle.

Я открыл файл Folders.groovy и изменил кодировку с UTF8 на UTF8 без спецификации. После этого изменения скрипт работает отлично.

ОБНОВЛЕНИЕ Я обновился до последней версии Jenkins и попытался сохранить скрипт Groovy в UTF8, но все равно не получается. Я пробовал ANSI и UTF8 без BOM, оба работают нормально, поэтому нам просто нужно привыкнуть к сохранению наших скриптов с кодировкой, отличной от кодировки по умолчанию.

person Matthew MacFarland    schedule 30.11.2015
comment
Я думаю, что формат не по умолчанию пришел из Visual Studio 2013. Я создал новый пустой текстовый файл в Windows, добавил его в папку управления исходным кодом, открыл его в текстовом редакторе Visual Studio по умолчанию, а затем сохранил его. То есть версия имела нестандартный формат (UTF8 с BOM). И Notepad ++, и Sublime по умолчанию используют UTF8 без спецификации, которая является работающей кодировкой. - person Matthew MacFarland; 30.11.2015