1

Wir möchten Meilensteine ​​verwenden, um ältere Builds abzubrechen. Wir verwenden Multi-Branch-Pipeline, um jede Pull-Anforderung von Github zu erstellen. Der Build ist in 4-5 min abgeschlossen und ist in 5 Stufen unterteilt. Wir möchten den aktuellen Build abbrechen (egal in welcher Phase), wenn die neue Änderung an Github übergeben wird (ein neuer Build wurde gestartet).Jenkins 2.0 Build Annullierung mit Meilensteinen

Also weisen wir zu Beginn des Builds einen Meilenstein zu. Wir verwenden die Build-Nummer für den Meilenstein. Wenn ein neuer Build gestartet wird, wird der nächste Meilenstein abgeschlossen, sodass der vorherige Build abgebrochen wurde.

Das Problem ist, dass die Pipeline sofort beendet wird und manchmal dies in einem falschen Zustand verlassen.

Können wir den Build so konfigurieren, dass er wartet, bis der aktuelle Schritt abgeschlossen ist, bevor er abgebrochen wird?

Eine andere Möglichkeit besteht darin, nach jeder Phase verschiedene Meilensteine ​​zu haben. In diesem Fall möchten wir den Build nicht abbrechen, wenn ein anderer Build den aktuellen Meilenstein abschließt, aber den nächsten Meilenstein nicht eingibt. Ist das möglich?

Vielen Dank im Voraus.

Antwort

0

Was meinen Sie mit "inkorrektem Zustand", könnte das gelöst werden?

Vielleicht könnten Sie dies mit einer Meilenstein/Schloss-Kombination erreichen. Wir verwenden ein Schloss um unseren Bereitstellungsschritt, so dass es nicht unterbrochen werden konnte.

0

Dies kann helfen:

/* This method should be added to your Jenkinsfile and called at the very beginning of the build*/ 
@NonCPS 
def cancelPreviousBuilds() { 
    def jobName = env.JOB_NAME 
    def buildNumber = env.BUILD_NUMBER.toInteger() 
    /* Get job name */ 
    def currentJob = Jenkins.instance.getItemByFullName(jobName) 

    /* Iterating over the builds for specific job */ 
    for (def build : currentJob.builds) { 
     /* If there is a build that is currently running and it's not current build */ 
     if (build.isBuilding() && build.number.toInteger() != buildsNumber) { 
      /* Than stopping it */ 
      build.doStop() 
     } 
    } 
}