web-dev-qa-db-ja.com

Scripted Jenkinsパイプライン:失敗しても続行

前のステージが失敗した場合でも、スクリプトパイプラインの実行を継続する方法はありますか?ジョブ全体が失敗する前にビルドが失敗したときに、特定のコマンド(クリーンアップ)を実行する必要があります。

6
user2988257

通常のアプローチは、tryブロック内でステップをラップすることです。

try {
  sh "..."
} catch (err) {
  echo "something failed"
}
// cleanup
sh "rm -rf *"

痛みを和らげ、パイプラインコードを読みやすくするために、これを別のメソッド ここでは私のグローバルライブラリコード にカプセル化しました。

別のアプローチ、特に。 宣言型パイプラインblogpresentation )がこの問題のために作成されました。

14
StephenKing

受け入れられた回答は、ステージを失敗させることも、不安定としてマークすることもありません。ステージを失敗させ、パイプラインの実行を継続し、ビルドの結果を選択することが可能になりました。

pipeline {
    agent any
    stages {
        stage('1') {
            steps {
                sh 'exit 0'
            }
        }
        stage('2') {
            steps {
                catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
                    sh "exit 1"
                }
            }
        }
        stage('3') {
            steps {
                sh 'exit 0'
            }
        }
    }
}

上記の例では、すべてのステージが実行され、パイプラインは成功しますが、ステージ2は失敗と表示されます。

Pipeline Example

ご想像のとおり、buildResultstageResultを自由に選択して、不安定な状態にしたい場合に備えてください。ビルドに失敗して、パイプラインの実行を続行することもできます。

これはかなり新しい機能なので、Jenkinsが最新であることを確認してください。

8
Erik B
  post {
    always {
      cleanWs()
    }
  }
}

残りが失敗しても、常にジョブをクリーンアップします

0
Chris Welsh