web-dev-qa-db-ja.com

変数へのJenkinsパイプラインのインタラクティブ入力を読み取ります

Jenkinsパイプラインで、実行時にインタラクティブな入力を提供するオプションをユーザーに提供したいと考えています。 groovyスクリプトでユーザー入力をどのように読み取ることができるかを理解したいと思います。サンプルコードで私たちを支援するためのリクエスト:

私は次のドキュメントを参照しています: 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'])

しかし、これらのパラメーターをファイルに書き込んだり、変数に割り当てたりすることはできません。どうすればこれを達成できますか?

6
Yash

変数とファイルに保存するには、持っているものに基づいて次のようなものを試してください:

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

これはinput()の使用法の最も簡単な例です。

  • ステージビューで、ファーストステージにカーソルを合わせると、「続行しますか?」という質問に気づきます。
  • ジョブを実行すると、コンソール出力に同様の注記が表示されます。

[続行]または[中止]をクリックするまで、ジョブは一時停止状態のユーザー入力を待ちます。

pipeline {
    agent any

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

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

パラメータのリストを表示し、ユーザーが1つのパラメータを選択できるようにする、より高度な使用法があります。選択に基づいて、Groovyロジックを記述して、続行し、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
        }
    }

}

StringParameterDefinitionTextParameterDefinitionまたはBooleanParameterDefinitionや、リンクに記載されているその他の多くも使用できます

6
dot

ソリューション: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
            }
        }
3
avivamg