Ich habe ein Pipeline-Skript in Jenkins.
Ich habe diese Ausnahme bekommen:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Skripte dürfen die Methode groovy.json.JsonSlurperClassic parseText java.lang.String nicht verwenden
Ich habe die Ausnahme nachgeschlagen und einige Hinweise gefunden, dass ich die Methode, bei der die Ausnahme auftritt, mit Anmerkungen versehen sollte @NonCPS
. Ich habe das getan, ohne wirklich zu verstehen, was das tut.
Danach wurde eine Ausnahme, die ich in diese Methode geworfen habe, nicht mehr von einer try
Klausel erfasst.
Was ist die Idee dahinter @NonCPS
? Welche Auswirkungen hat die Verwendung?
Antworten:
Die Ausnahme, die Sie sehen, ist auf die Skriptsicherheit und das Sandboxing zurückzuführen. Wenn Sie ein Pipeline-Skript ausführen, wird es standardmäßig in einer Sandbox ausgeführt, in der nur bestimmte Methoden und Klassen verwendet werden können. Es gibt Möglichkeiten, Vorgänge auf die Whitelist zu setzen. Überprüfen Sie den obigen Link.
Die
@NonCPS
Anmerkung ist nützlich, wenn Sie Methoden haben, die Objekte verwenden, die nicht serialisierbar sind. Normalerweise müssen alle Objekte, die Sie in Ihrem Pipeline-Skript erstellen, serialisierbar sein (der Grund dafür ist, dass Jenkins den Status des Skripts serialisieren kann, damit es angehalten und auf der Festplatte gespeichert werden kann).Wenn Sie
@NonCPS
eine Methode anwenden, führt Jenkins die gesamte Methode auf einmal aus, ohne pausieren zu können. Außerdem dürfen Sie innerhalb einer mit@NonCPS
Anmerkungen versehenen Methode keine Pipeline-Schritte oder CPS-transformierten Methoden referenzieren . Weitere Informationen hierzu finden Sie hier .Was die Ausnahmebehandlung betrifft: Nicht 100% sicher, was Sie erleben; Ich habe Folgendes versucht und es funktioniert wie erwartet:
und
und schlussendlich:
Alle drucken "Gefangen" wie erwartet.
quelle