你看到的例外是由於script security和沙箱。基本上,默認情況下,當你運行一個管道腳本時,它運行在一個只允許使用某些方法和類的沙箱中。有白名單操作的方法,檢查上面的鏈接。
當您有使用不可序列化的對象的方法時,@NonCPS
註釋非常有用。通常情況下,您在管道腳本中創建的所有對象都必須是可序列化的(原因是Jenkins必須能夠序列化腳本的狀態,以便它可以暫停並存儲在磁盤上)。
當您將@NonCPS
放在方法上時,Jenkins將一次執行整個方法而無法暫停。此外,您也不允許在@NonCPS
帶註釋的方法中引用任何流水線步驟或CPS轉換方法。 More information about this can be found here。
至於異常處理:不是100%確定你正在經歷什麼;我試過以下,它按預期工作:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
和
@NonCPS
def myFunction() {
throw new RuntimeException();
}
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
最後:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
所有打印 「中招」 的預期。