2017-04-08 4 views
5

私はJenkinsパイプラインの条件付きステージに相当するものを前のステージのtry/catchを使用してレプリケートしようとしています。条件付きステージをトリガーします。ジェンキンスパイプライン - 特定のステージと後続の条件付きステップでキャッチしよう

成功のvarをSUCCESSまたはFAILEDに設定するtry catchブロックがあります。これは後でwhen文の一部として(条件付きステージの一部として)使用されます。次のように

私が使用していたコードは次のとおりです。

pipeline { 
    agent any 
    stages { 
     try{ 
      stage("Run unit tests"){ 
       steps{ 
        sh ''' 
         # Run unit tests without capturing stdout or logs, generates cobetura reports 
         cd ./python 
         nosetests3 --with-xcoverage --nocapture --with-xunit --nologcapture --cover-package=application 
         cd .. 
        ''' 
        currentBuild.result = 'SUCCESS' 
       } 
      } 
     } catch(Exception e) { 
      // Do something with the exception 
      currentBuild.result = 'SUCCESS' 
     } 

     stage ('Speak') { 
      when { 
       expression { currentBuild.result == 'SUCCESS' } 
      } 
      steps{ 
       echo "Hello, CONDITIONAL" 
      } 
     } 
    } 
} 

次のように私は受け付けており、最新の構文エラーがある:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
failed: 
WorkflowScript: 4: Expected a stage @ line 4, column 9. 
     try{ 

私はバリエーションの多くをも試みました。

私はここで間違ったアプローチをとっていますか?これはかなり一般的な要件のようです。

ありがとうございました。

+2

あなたは宣言的パイプラインを使用していますが、これは 'try' /' catch'のようなGroovyコードを実行することはできません。 – StephenKing

答えて

6

これは、あなたが行っていることによって問題を解決する可能性があります。ステージは、前のステージが成功したときにのみ実行されるため、実際には2つのステージがあり、最初のステージが成功すると2番目のステージが実行されるようにするには、テストが失敗したときに最初のステージが適切に失敗するようにします。キャッチすることで(望ましい)失敗を防ぐことができます。最後に、失敗を保存し、テスト結果を取得するために使用することもできます。

テストが合格したときにそこでここでは、第二段階のみ実行され、テスト結果にかかわらず、記録されます。

pipeline { 
    agent any 
    stages { 
    stage("Run unit tests"){ 
     steps { 
     script { 
      try { 
      sh ''' 
       # Run unit tests without capturing stdout or logs, generates cobetura reports 
       cd ./python 
       nosetests3 --with-xcoverage --nocapture --with-xunit --nologcapture --cover-package=application 
       cd .. 
       ''' 
      } finally { 
      junit 'nosetests.xml' 
      } 
     } 
     } 
    } 
    stage ('Speak') { 
     steps{ 
     echo "Hello, CONDITIONAL" 
     } 
    } 
    } 
} 

は、私が実際に宣言型のパイプラインでtryを使用していますが、like StephenKing says、直接試してみることはできません(スクリプトステップで任意のグルーヴィーコードをラップする必要があります)。

関連する問題