2017-04-05 10 views
1

私はJenkinsパイプラインで遊んでいますが、入力ステップの結果をキャプチャする際にいくつか問題があります。入力手順を次のように宣言すると、...Jenkins入力ステップの結果をキャプチャ

stage('approval'){ 
    steps{ 
    input(id: 'Proceed1', message: 'Was this successful?', 
    parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']]) 
    } 
} 

...すべてがうまくいきます。ただし、キャプチャの結果(質問に与えられた回答)を取得しようとすると、スクリプトは機能しません。たとえば、次のようなスクリプト:次のエラーで

pipeline { 
    agent { label 'master' } 
    stages { 
    stage('approval'){ 
     steps{ 
      def result=input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']]) 
      echo 'echo Se ha obtenido aprobacion! (como usar los datos capturados?)' 
     } 
    } 
    } 
} 

...結果:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
WorkflowScript: 6: Expected a step @ line 6, column 13. 
       result=input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']]) 
      ^

1 error 

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310) 
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1073) 
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591) 
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) 
    ... 
    at hudson.model.Executor.run(Executor.java:404) 
Finished: FAILURE 

は非常に興味深い何かが、私はパイプラインの{}外の入力を移動した場合、それが動作することです完璧に良い。私は 'def'ステートメントで同じ動作が発生することに気付きました(私はパイプライン{}外の変数を定義して使用できますが、内部で定義することはできません)。

私はここでかなり基本的なものを見逃しているに違いないと思いますが、数時間後に別の設定を試してみると、それを動作させることができませんでした。パイプライン{}内で使用されるロジックがごくわずかなコマンドに制限されているだけであるか?人々は複雑なパイプラインをどのように構築するのですか?

ご協力いただければ幸いです。

答えて

1

私は最終的にそれを動作させるように管理しましたが、パイプラインを避けるために構文を完全に変更しなければなりませんでした。ステージ&は上記のようにステップタグを使用します。スクリプトブロックは、別名、ほとんどすべての宣言型パイプライン内Groovyの機能をスクリプト化パイプラインの構文を使用できます

#!/usr/bin/env groovy 

node('master'){ 

    // -------------------------------------------- 
    // Approval 
    // ------------------------------------------- 
    stage 'Approval' 

    def result=input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']]) 
    echo 'Se ha obtenido aprobacion! '+result 

} 
2

:代わりに、私のようなものを実装しました。 宣言パイプラインの構文の比較と制限については、https://jenkins.io/doc/book/pipeline/syntax/を参照してください。

pipeline { 
    agent any 
    ... 
    stages {  
     stage("Stage with input") { 
      steps { 
       script { 
        def result = input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']]) 
        echo 'result: ' + result 
       }  
      } 
     } 
    } 
} 
関連する問題