Параметр выбора в jenkins как выход из сценария оболочки (конвейер) - PullRequest
0 голосов
/ 25 марта 2020

Я ищу способ использовать выходные данные из оболочки в качестве параметра jenkins, но в конвейере не хочу использовать какие-либо плагины пользовательского интерфейса.

Например, я хочу использовать выходные данные из команды

ls /home

в качестве параметра выбора (чтобы я мог выбирать пользователей из списка), возможно ли сделать что-то подобное? Это должно быть сделано в конвейере, я не ищу некоторые плагины, которые позволяют вам делать что-то подобное, но вам нужно делать все в пользовательском интерфейсе, если плагин поддерживает конвейеры, то это тоже нормально.

1 Ответ

0 голосов
/ 25 марта 2020

Для запуска конвейера его параметры должны быть полностью определены до запуска конвейера.

Чтобы конвейер проанализировал выходные данные ls /home, он должен быть запущен и выделите узел и рабочее пространство, что может произойти только через после запуска конвейера.

Таким образом, вы попадаете в какую-то проблему с куриным яйцом, когда вам нужно запустить некоторый код перед запуском конвейера, но вы не можете запустить конвейер до того, как запустите этот код.

Итак, ваша проблема сводится к тому, «Как я могу запустить какой-нибудь произвольный Groovy сценарий перед тем, как запустить конвейер? "

Для этого есть две опции:

  1. Плагин ActiveChoice позволяет определить параметр, который возвращает скрипт. Затем Дженкинс запустит скрипт (не забудьте одобрить его), чтобы показать вам страницу «Построить с параметрами». Отладка это общеизвестно сложно, но это может go на большую длину.

  2. В качестве альтернативы, вы можете запустить сценарий конвейера, прежде чем запустить декларативный (основной), как описано например, в этот ответ . Это может выглядеть примерно так:

def my_choices_list = []

node('master') {
   stage('prepare choices') {
       // read the folder contents
       def my_choices = sh script: "ls -l /home", returnStdout:true
       // make a list out of it - I haven't tested this!
       my_choices_list = my_choices.trim().split("\n")
   }
}

pipeline {
   parameters { 
        choiceParam('OPTION', my_choices_list)
...