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.
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.
}
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"
}
}
}
}
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!")