2017-03-03 25 views

答えて

1

いいえ、パイプラインの通常の処理は最初から最後まで行わなければなりません。 しかし、あなたの成功の状態をテストし、残りのコードをifやそのようなもので呼び出さないことができます。関数を使用すると、それを簡単に達成するのに役立ちます。 :

node() { 
    // Part 1 
    def isSuccess = part1(); 

    if(!isSuccess) { 
    part2() 
    } 
} 

// Part 2 
def function part2() { 
    // Part 2 code 
} 

しかし、あなたのパイプラインが適切に設計されていないという事実を強調しているかもしれません。それがあなたが望むものでない場合は、ユースケースのような詳細を提供してください。

0

まず、私はそのようなステップに気づいていません。

しかし、成功する必要がある場合は、error手順を使用して特定のメッセージでビルドを中止することができます。 try{}catch(){}ブロックでこのエラーをキャッチし、メッセージをチェックし、ビルドステータスを成功に設定します。

1

他の回答で言われたように、このように中止するステップはありません。 Christopher氏は、中止するコードの周りにtry-catchを使用し、error()を使用することを提案しました。私はあなたのビルドのアボートステータスを追跡する必要があると思う - パイプラインでアボートメソッドをグローバルに定義してこのステータスを設定し、エラーを発生させてステージの他のステップを中止することができます。

宣言パイプラインを使用した場合は、後の段階で式を使用して 'when'宣言を使用できるため、中止ステータスが設定されているときには実行されません。

私自身はそう、私はここにこれを行うパイプラインの例働いて、この問題に興味を持っています:プロパティがあるサイドノートとして

/** 
* Tracking if the build was aborted 
*/ 
Boolean buildAborted = false 

/** 
* Abort the build with a message 
*/ 
def abortBuild = { String abortMessage -> 
    buildAborted = true 
    error(abortMessage) 
} 

pipeline { 

    agent any 

    parameters { 
     string(name: 'FailOrAbort', defaultValue: 'ok', description: "Enter 'fail','abort' or 'ok'") 
    } 

    stages { 

     stage('One') { 

      steps { 

       echo "FailOrAbort = ${params.FailOrAbort}" 

       script { 

        try { 

         echo 'Doing stage 1' 

         if(params.FailOrAbort == 'fail') { 

          echo "This build will fail" 
          error("Build has failed") 

         } 
         else if(params.FailOrAbort == 'abort') { 

          echo "This build will abort with SUCCESS status" 
          abortBuild("This build was aborted") 

         } 
         else { 

          echo "This build is a success" 

         } 

         echo "Stage one steps..." 

        } 
        catch(e) { 

         echo "Error in Stage 1: ${e.getMessage()}" 

         if(buildAborted) { 
          echo "It was aborted, ignoring error status" 
         } 
         else { 
          error(e.getMessage()) 
         } 
        } 
       } 
      } 

      post { 
       failure { 
        echo "Stage 1 failed" 
       } 
      } 
     } 

     stage('Two') { 

      when { 
       expression { 
        return !buildAborted 
       } 
      } 

      steps { 
       echo "Doing stage 2" 
      } 
     } 

     stage('Three') { 

      when { 
       expression { 
        return !buildAborted 
       } 
      } 

      steps { 
       echo "Doing stage 3" 
      } 
     } 
    } 

    post { 
     always { 
      echo "Build completed. currentBuild.result = ${currentBuild.result}" 
     } 
     failure { 
      echo "Build failed" 
     } 
     success { 
      script { 
       if(buildAborted) { 
        echo "Build was aborted" 
       } else { 
        echo 'Build was a complete success' 
       } 
      } 
     } 
     unstable { 
      echo 'Build has gone unstable' 
     } 
    } 
} 

「をcurrentBuild.result」あなたが調整することができますパイプラインが一度 'FAILURE'に設定されると、 'SUCCESS'に戻すことはできません.JenkinsモデルではAFAIKが許可されていません。

+0

「currentBuild.result」のライフサイクルを説明するための名著 - それは私を2回以上上手くしました。 – rbellamy

関連する問題