web-dev-qa-db-ja.com

Jenkinsfileで失敗したビルドのアクションを実行する方法

Jenkinsfileでのビルドが失敗した場合、クリーンアップ(またはロールバック)を実行する方法はありますか?

Atlassian Stashインスタンスにビルドが失敗したことを通知します(正しいURLでcurlを実行します)。

基本的に、ビルドステータスが失敗に設定されている場合は、ポストステップになります。

try {} catch ()を使用する必要がありますか?その場合、どの例外タイプをキャッチする必要がありますか?

14

現在、この問題の解決策も探しています。これまでのところ、私が思いつく最高の方法は、try catchブロックでパイプラインコードを実行するラッパー関数を作成することです。成功時にも通知する場合は、例外を変数に保存し、通知コードをfinallyブロックに移動できます。また、Jenkinsがビルドが失敗したと見なすように、例外を再スローする必要があることに注意してください。この問題に対するより洗練されたアプローチを見つけた読者がいるかもしれません。

pipeline('linux') {
    stage 'Pull'
    stage 'Deploy'
    echo "Deploying"
    throw new FileNotFoundException("Nothing to pull")
    // ... 
}

 def pipeline(String label, Closure body) {
     node(label) {
        wrap([$class: 'TimestamperBuildWrapper']) {
            try {
                body.call()
            } catch (Exception e) {
                emailext subject: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - FAILURE (${e.message})!", to: "[email protected]",body: "..."
                throw e; // rethrow so the build is considered failed                        
            } 
        }
    }
}
19
Till Kuhn

2017-02-03以降、 宣言的パイプライン構文1. を使用して、このポストビルドステップ機能を実現できます。

これは、パイプラインを構築するための新しい構文であり、事前定義された構造と、ユーザーがエージェント、ポストアクション、環境設定、資格情報、およびステージを定義できるいくつかの新しいステップでパイプラインを拡張します。

次に、宣言構文を使用したJenkinsfileのサンプルを示します。

pipeline {
  agent  label:'has-docker', dockerfile: true
  environment {
    GIT_COMMITTER_NAME = "jenkins"
    GIT_COMMITTER_EMAIL = "[email protected]"
  }
  stages {
    stage("Build") {
      steps {
        sh 'mvn clean install -Dmaven.test.failure.ignore=true'
      }
    }
    stage("Archive"){
      steps {
        archive "*/target/**/*"
        junit '*/target/surefire-reports/*.xml'
      }
    }
  }
  post {
    always {
      deleteDir()
    }
    success {
      mail to:"[email protected]", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
    }
    failure {
      mail to:"[email protected]", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
    }
  }
}

postコードブロックは、ポストステップアクションを処理するものです

宣言的パイプライン構文のリファレンスは here です

20
amarruedo