web-dev-qa-db-fra.com

Lire une entrée interactive dans le pipeline Jenkins dans une variable

Dans un pipeline Jenkins, je veux fournir une option à l'utilisateur pour donner une entrée interactive au moment de l'exécution. Je veux comprendre comment pouvons-nous lire l'entrée utilisateur dans le script groovy. Demande de nous aider avec un exemple de code:

Je fais référence à la documentation suivante: https://jenkins.io/doc/pipeline/steps/pipeline-input-step/

EDIT-1:

Après quelques essais, j'ai réussi à travailler:

 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'])

                }
            }
        }
    }
}

Dans cet exemple, je peux faire écho (imprimer) les paramètres d'entrée utilisateur:

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

mais je ne suis pas en mesure d'écrire ces paramètres dans un fichier ou de les affecter à une variable. Comment pouvons-nous y parvenir?

6
Yash

Pour enregistrer dans des variables et un fichier, essayez quelque chose comme ça en fonction de ce que vous aviez:

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'
                }
            }
        }
    }
}
12
macg33zr

Il s'agit de l'exemple le plus simple d'utilisation de input ().

  • Dans la vue de la scène, lorsque vous passez la souris sur la première étape, vous remarquez la question "Voulez-vous continuer?".
  • Vous remarquerez une note similaire dans la sortie de la console lorsque le travail est exécuté.

Jusqu'à ce que vous cliquiez sur Continuer ou sur Annuler, le travail attend l'entrée utilisateur en état de pause.

pipeline {
    agent any

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

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

Il existe des utilisations plus avancées pour afficher la liste des paramètres et permettre à l'utilisateur de sélectionner un paramètre. En fonction de la sélection, vous pouvez écrire une logique groovy pour continuer et déployer en QA ou en production.

Le script suivant affiche une liste déroulante dans laquelle un utilisateur peut choisir

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
        }
    }

}

Vous pouvez également utiliser StringParameterDefinition, TextParameterDefinition ou BooleanParameterDefinition et bien d'autres comme mentionné dans votre lien

6
dot

Solution: Pour définir, obtenir et accéder aux entrées utilisateur en tant que variable sur le pipeline jenkins, vous devez utiliser ChoiceParameterDefinition , en attachant un extrait de travail rapide:

    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
            }
        }
3
avivamg