web-dev-qa-db-fra.com

Comment jeter une exception dans le pipeline Jenkins?

J'ai géré les étapes du pipeline Jenkins avec des blocs catch catch. Je veux lancer une exception manuellement dans certains cas. mais cela montre l'erreur ci-dessous.

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new Java.io.IOException Java.lang.String

J'ai vérifié la section scriptApproval et il n'y a aucune approbation en attente.

6
Yahwe Raj

Si vous souhaitez abandonner votre programme à une exception, vous pouvez utiliser l'étape de pipeline error pour arrêter l'exécution du pipeline avec une erreur. Exemple :

try {
  // Some pipeline code
} catch(Exception e) {
   // Do something with the exception 

   error "Program failed, please read logs..."
}

Si vous souhaitez arrêter votre pipeline avec un statut de réussite, vous souhaiterez probablement une sorte de booléen indiquant que votre pipeline doit être arrêté, par exemple:

boolean continuePipeline = true
try {
  // Some pipeline code
} catch(Exception e) {
   // Do something with the exception 

   continuePipeline = false
   currentBuild.result = 'SUCCESS'
}

if(continuePipeline) {
   // The normal end of your pipeline if exception is not caught. 
}
16
Pom12

Voici comment je le fais dans Jenkins 2.x. 

Remarques: N'utilisez pas le signal d'erreur, cela évitera les étapes ultérieures. 

stage('stage name') {
            steps {
                script {
                    def status = someFunc() 

                    if (status != 0) {
                        // Use SUCCESS FAILURE or ABORTED
                        currentBuild.result = "FAILURE"
                        throw new Exception("Throw to stop pipeline")
                        // do not use the following, as it does not trigger post steps (i.e. the failure step)
                        // error "your reason here"

                    }
                }
            }
            post {
                success {
                    script {
                        echo "success"
                    }
                }
                failure {
                    script {
                        echo "failure"
                    }
                }
            }            
        }
1
Learner

Il semble qu'aucun autre type d'exception que Exception ne puisse être levé. Non IOException, no RuntimeException, etc.

Cela fonctionnera:

throw new Exception("Something went wrong!")

Mais ceux-ci ne le feront pas:

throw new IOException("Something went wrong!")
throw new RuntimeException("Something went wrong!")
0
Marco Roy