J'ai le code suivant dans le Jenkinsfile qui appelle une méthode "optionnelle", et si elle n'existe pas, elle affichera simplement un message
... try { verifyDeployment(pipelineParams) } catch (err) { echo "[INFO] No `verifyDeployment` defined, thus ignoring this step" } ...
Cependant, lorsque j'exécute le pipeline, le catch ne semble pas fonctionner à J'obtiens l'erreur suivante:
java.lang.NoSuchMethodError: Aucune méthode DSL de ce type 'verifyDeployment' n'a été trouvée parmi les étapes
Qu'est-ce que je rate?
3 Réponses :
Il s'avère que vous devez explicitement attraper NoSuchMethodError
comme suit
... try { verifyDeployment(pipelineParams) } catch (NoSuchMethodError ex) { echo "[INFO] No `verifyDeployment` defined, thus ignoring this step" } ...
Vous utilisez une mauvaise syntaxe groovy. Consultez la syntaxe groovy appropriée pour détecter les exceptions: Syntaxe pour détecter les exceptions
try { //Protected code } catch(ExceptionName e1) { //Catch block }
Vous pouvez également être plus générique avec le type catching et
catch (Throwable ex)
Voir la hiérarchie des types:
https://docs.oracle.com /javase/7/docs/api/java/lang/NoSuchMethodError.html
Mais assurez-vous de lire sur "la pratique de la capture jetable" et de décider si cela vous convient. J'attrape parfois jetable uniquement pour la journalisation suivie d'une relance.
Vous utilisez une mauvaise syntaxe. Consultez la syntaxe groovy appropriée pour détecter les exceptions: tutorialspoint.com/groovy/groovy_exception_handling.htm
Merci, je n'ai pas réalisé que la syntaxe est incorrecte car dans certains cas, elle semble fonctionner. Fait intéressant également, les exemples montrent la même syntaxe que celle que j'utilise jenkins.io/doc/pipeline / steps / workflow-basic-steps
Veuillez ajouter votre commentaire comme réponse, afin que je puisse l'accepter et vous obtiendrez une récompense