Декларативный конвейер Jenkins - динамически заполняет выбор шага ввода из результатов выполнения команды в рабочей области - PullRequest
1 голос
/ 07 марта 2019

Я хочу создать шаг ввода, который предлагает пользователю выбрать тег git.Для этого я хочу заполнить раскрывающийся список значениями, возвращаемыми git tag.

Вот мой текущий конвейер:

pipeline {
    agent any
    stages {
        stage('My Stage') {
            input {
                message "Select a git tag"
                parameters {
                    choice(name: "git_tag", choices: TAGS_HERE, description: "Git tag")
                }
            }
            steps {
                echo "The selected tag is: ${git_tag}"
            }
        }
    }
}

Я бы хотел, чтобы TAGS_HERE была переменной илиметод, который содержит выходные данные, заданные командой git tags.

До сих пор я пытался:

  • Установка тегов для переменной окружения на предыдущем шаге - не работаетпотому что эти переменные по какой-то причине недоступны во входном блоке
  • Вызов отдельного Groovy-метода, который запускает команду и возвращает вывод - не работает, потому что рабочее пространство потеряно и все команды выполняются в /

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

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Улучшив ответ @hakamairi, вы можете сделать что-то вроде этого:

pipeline {
    agent any
    stages {
        stage('My Stage') {
            steps {
                script {
                    def GIT_TAGS = sh (script: 'git tag -l', returnStdout:true).trim()
                    inputResult = input(
                        message: "Select a git tag",
                        parameters: [choice(name: "git_tag", choices: "${GIT_TAGS}", description: "Git tag")]
                    )
                }
            }
        }
        stage('My other Stage'){
            steps{
                echo "The selected tag is: ${inputResult}"
            }
        }
    }
}
0 голосов
/ 07 марта 2019

Может быть, вы не в узле (в старом сценарии конвейера), вы можете попробовать это. Возможно, script не нужен.

pipeline {
    agent any
    stages {
        stage('My Stage') {
            steps {
                def inputResult = input {
                    message "Select a git tag"
                    parameters {
                        choice(name: "git_tag", choices: getTags(), description: "Git tag")
                    }
                }
                echo "The selected tag is: ${inputResult.git_tag}"
            }
        }
    }
}

getTags должен возвращать варианты, разделенные новой строкой.

...