Was ist der Effekt auf @NonCPS in einem Jenkins-Pipeline-Skript?
Ich habe ein pipeline-script in Jenkins.
Ich verwendet, um dieses Ausnahme:
org.jenkinsci.plugins.scriptsecurity.in der sandbox.RejectedAccessException:
Skripts sind nicht zulässig-Methode groovy.json.JsonSlurperClassic
parseText java.lang.String
Sah ich die Ausnahme, und ich fand einige Hinweise darauf, dass ich sollte kommentieren Sie die Methode, wo theexception tritt mit @NonCPS
. Ich Tat dies, ohne wirklich zu verstehen, was dies bedeutet.
Danach jedoch eine Ausnahme, dass ich zu werfen, die Methode war nicht mehr gefangen von einem try
- Klausel.
Also, was ist die Idee hinter @NonCPS
? Was sind die Auswirkungen der Verwendung es?
InformationsquelleAutor der Frage octavian | 2017-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausnahme, dass Sie sehen, ist aufgrund Skript-Sicherheit und sandboxing. Im Grunde standardmäßig beim ausführen einer pipeline-script, es läuft in einer sandbox, die nur erlauben den Einsatz von bestimmten Methoden und Klassen. Es gibt Möglichkeiten, um whitelist-Operationen, überprüfen Sie den obigen link.
Den
@NonCPS
Anmerkung ist hilfreich, wenn Sie über Methoden, die Objekte, die nicht serialisierbar sind. Normalerweise werden alle Objekte, die Sie erstellen in Ihrem pipeline-Skript muss serialisierbar sein (der Grund dafür ist, dass Jenkins muss in der Lage sein serialisiert den Zustand der Skript, so dass es sein kann, angehalten und auf der Festplatte gespeichert).Wenn Sie
@NonCPS
auf eine Methode, Jenkins führt die gesamte Methode in einem Rutsch, ohne die Möglichkeit zu pausieren. Auch, du bist nicht erlaubt, um die Referenz auf alle pipeline-Stufen oder CPS verwandelt Methoden innerhalb einer@NonCPS
annotierten Methode. Mehr Informationen zu diesem Thema finden Sie hier.Als für die Ausnahmebehandlung: Nicht 100% sicher, was Sie erleben; ich habe versucht, die folgenden, und es funktioniert wie erwartet:
und
und schließlich:
Alle drucken "Erwischt", wie erwartet.
InformationsquelleAutor der Antwort Jon S