Чтение интерактивного ввода в конвейере Jenkins в переменную

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

Я имею в виду следующую документацию: https://jenkins.io/doc/pipeline/steps/pipeline-input-step/

РЕДАКТИРОВАТЬ-1:

После некоторых испытаний у меня получилось:

 pipeline {
    agent any

    stages {

        stage("Interactive_Input") {
            steps {
                script {
                def userInput = input(
                 id: 'userInput', message: 'Enter path of test reports:?', 
                 parameters: [
                 [$class: 'TextParameterDefinition', defaultValue: 'None', description: 'Path of config file', name: 'Config'],
                 [$class: 'TextParameterDefinition', defaultValue: 'None', description: 'Test Info file', name: 'Test']
                ])
                echo ("IQA Sheet Path: "+userInput['Config'])
                echo ("Test Info file path: "+userInput['Test'])

                }
            }
        }
    }
}

В этом примере я могу вывести (распечатать) параметры ввода пользователя:

echo ("IQA Sheet Path: "+userInput['Config'])
echo ("Test Info file path: "+userInput['Test'])

но я не могу записать эти параметры в файл или назначить их переменной. Как мы можем этого добиться?


person Yash    schedule 02.11.2017    source источник
comment
Пожалуйста, покажите свой текущий код. Иметь хотя бы базовую версию не так уж и сложно, правда?   -  person StephenKing    schedule 02.11.2017


Ответы (3)


Для сохранения в переменные и в файл попробуйте что-то вроде этого в зависимости от того, что у вас было:

pipeline {

    agent any

    stages {

        stage("Interactive_Input") {
            steps {
                script {

                    // Variables for input
                    def inputConfig
                    def inputTest

                    // Get the input
                    def userInput = input(
                            id: 'userInput', message: 'Enter path of test reports:?',
                            parameters: [

                                    string(defaultValue: 'None',
                                            description: 'Path of config file',
                                            name: 'Config'),
                                    string(defaultValue: 'None',
                                            description: 'Test Info file',
                                            name: 'Test'),
                            ])

                    // Save to variables. Default to empty string if not found.
                    inputConfig = userInput.Config?:''
                    inputTest = userInput.Test?:''

                    // Echo to console
                    echo("IQA Sheet Path: ${inputConfig}")
                    echo("Test Info file path: ${inputTest}")

                    // Write to file
                    writeFile file: "inputData.txt", text: "Config=${inputConfig}\r\nTest=${inputTest}"

                    // Archive the file (or whatever you want to do with it)
                    archiveArtifacts 'inputData.txt'
                }
            }
        }
    }
}
person macg33zr    schedule 17.11.2017

Это простейший пример использования input ().

  • В виде сцены, когда вы наводите курсор на первую стадию, вы замечаете вопрос «Вы хотите продолжить?».
  • Вы заметите аналогичное примечание в выводе консоли при выполнении задания.

Пока вы не нажмете «Продолжить» или «Прервать», задание будет ожидать ввода данных пользователем в приостановленном состоянии.

pipeline {
    agent any

    stages {
        stage('Input') {
            steps {
                input('Do you want to proceed?')
            }
        }

        stage('If Proceed is clicked') {
            steps {
                print('hello')
            }
        }
    }
}

Существуют более продвинутые способы отображения списка параметров, позволяющие пользователю выбрать один параметр. Основываясь на выборе, вы можете написать отличную логику для продолжения и развертывания в QA или продакшене.

Следующий скрипт отображает раскрывающийся список, из которого пользователь может выбрать

stage('Wait for user to input text?') {
    steps {
        script {
             def userInput = input(id: 'userInput', message: 'Merge to?',
             parameters: [[$class: 'ChoiceParameterDefinition', defaultValue: 'strDef', 
                description:'describing choices', name:'nameChoice', choices: "QA\nUAT\nProduction\nDevelop\nMaster"]
             ])

            println(userInput); //Use this value to branch to different logic if needed
        }
    }

}

Вы также можете использовать _3 _, _ 4_ или BooleanParameterDefinition и многие другие, как указано в вашей ссылке.

person dot    schedule 02.11.2017
comment
Спасибо @dot за подробное объяснение. Пожалуйста, обратитесь к моему EDIT-1 в исходном вопросе. Я хочу назначить пользовательский ввод переменной или записать в файл. Как я могу этого добиться? - person Yash; 03.11.2017
comment
Что происходит, когда вы назначаете пользовательский ввод переменной? def variable = userInput['config'] - person dot; 08.11.2017
comment
В случае StringParameterDefinition, как нам использовать поле choices:? - person MeowRude; 13.08.2019

Решение. Чтобы задать, получить и получить доступ к вводу пользователя в виде переменной в конвейере jenkins, следует использовать ChoiceParameterDefinition, прикрепив быстрый рабочий фрагмент:

    script {
            // Define Variable
             def USER_INPUT = input(
                    message: 'User input required - Some Yes or No question?',
                    parameters: [
                            [$class: 'ChoiceParameterDefinition',
                             choices: ['no','yes'].join('\n'),
                             name: 'input',
                             description: 'Menu - select box option']
                    ])

            echo "The answer is: ${USER_INPUT}"

            if( "${USER_INPUT}" == "yes"){
                //do something
            } else {
                //do something else
            }
        }
person avivamg    schedule 22.09.2019