Pertanyaan Cara menangkap penghapusan UI secara manual di Jenkinsfile


Saya sudah mencoba mencari dokumentasi tentang bagaimana dalam pipa Jenkinsfile menangkap kesalahan yang terjadi ketika pengguna membatalkan pekerjaan di jenkins web UI.

Saya belum punya postatau try/catch/finally pendekatan untuk bekerja, mereka hanya bekerja ketika sesuatu gagal dalam build.

Ini menyebabkan sumber daya tidak terbebaskan ketika seseorang membatalkan suatu pekerjaan.

Apa yang saya miliki saat ini, adalah skrip dalam a pipa deklaratif, seperti:

pipeline {
  stage("test") {
    steps {
      parallell (
        unit: {
          node("main-builder") {
            script {
              try { sh "<build stuff>" } catch (ex) { report } finally { cleanup }
            }
          }
        }
      )
    }
  }
}

Jadi, semuanya ada di dalam catch(ex) dan finally blok diabaikan ketika pekerjaan dibatalkan secara manual dari UI.


4
2018-04-24 23:36


asal


Jawaban:


Pendekatan non deklaratif:

Ketika Anda membatalkan membangun skrip pipa, kecuali jenis org.jenkinsci.plugins.workflow.steps.FlowInterruptedException dilemparkan. Bebaskan sumber daya di catch memblokir dan melempar ulang pengecualian.

import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException

def releaseResources() {
    echo "Releasing resources"
    sleep 10
}

node {
    try {
        echo "Doing steps..."
        sleep 20
    } catch (FlowInterruptedException interruptEx) {
        releaseResources()
        throw interruptEx
    }
}

Pendekatan deklaratif:

Hal yang sama, tetapi dalam a script {} memblokir di steps dari stage. Bukan solusi yang paling rapi tetapi yang telah saya uji dan mulai bekerja.


5
2018-04-25 07:41