表示されている例外は、スクリプトのセキュリティとサンドボックス化によるものです。基本的に、デフォルトでは、パイプラインスクリプトを実行すると、特定のメソッドとクラスの使用のみを許可するサンドボックスで実行されます。操作をホワイトリストに登録する方法があります。上記のリンクを確認してください。
この@NonCPS
アノテーションは、シリアル化できないオブジェクトを使用するメソッドがある場合に役立ちます。通常、パイプラインスクリプトで作成するすべてのオブジェクトはシリアル化可能である必要があります(この理由は、Jenkinsがスクリプトの状態をシリアル化して、一時停止してディスクに保存できるようにする必要があるためです)。
@NonCPS
メソッドを置くと、Jenkinsは一時停止せずにメソッド全体を一度に実行します。また、@NonCPS
アノテーション付きメソッド内からパイプラインステップやCPS変換メソッドを参照することはできません。この詳細については、こちらをご覧ください。
例外処理に関して:あなたが経験していることを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();
予想どおりすべて「Caught」を印刷します。