Как выполнить простую команду оболочки в виде заводного скрипта в параметре active choice в Jenkins?

#jenkins #groovy #jenkins-pipeline

Вопрос:

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

 foundDirectories = sh(script: "ls -1 'X:\example\directory'", returnStdout: true).split()
    foundDirectories.each { key ->
        println(key)
    }
 

Я немного изменил код, чтобы сделать его полезным в качестве параметра-скрипта:

 foundDirectories = sh(script: "ls -1 'X:\example\directory'", returnStdout: true).split()

return foundDirectories 
 

Я попытался использовать этот код, Active Choice Parameter чтобы иметь возможность выбирать между найденными каталогами при построении с параметрами. Когда я нажимаю кнопку «Построить с параметрами» и появляется меню, сценарий, по-видимому, не работает, потому что поле остается пустым. Если я добавлю запасной сценарий, он будет выполнен.

Нужно ли мне добавлять какой-то код вокруг этого или sh-команды просто не работают изначально?

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

1. Вы не можете использовать ключевые слова Дженкинса, такие как sh, в заводных сценариях, которые не являются частью конвейера. Вы можете использовать класс файлов groovy для достижения этой цели или использовать плагин параметров списка файловых систем

2. Вы должны реализовать это как глобальный метод var в общей библиотеке, а затем он будет работать после импорта библиотеки.

3. Спасибо вам за все комментарии. Я не знал, что не могу использовать ключевые слова Дженкинса в заводной части, это все исправило. Теперь у меня другой подход, я использую класс File.

Ответ №1:

Вы можете попробовать приведенную ниже команду, в которой будут перечислены все файлы в данном каталоге. Я попробовал систему Linux.

даже вы можете фильтровать файлы на основе регулярных выражений с помощью eachFileMatch(regex) .

 import static groovy.io.FileType.FILES
def list=[]
new File("X:\example\directory").eachFile() { 
  file -> list.add(file.getName())
}
return list