表示されている例外は、script securityとサンドボックス化によるものです。基本的には、デフォルトでパイプラインスクリプトを実行すると、特定のメソッドとクラスの使用のみを許可するサンドボックスで実行されます。操作をホワイトリストに登録する方法があります。上記のリンクを確認してください。
@NonCPS
アノテーションは、シリアライズ可能でないオブジェクトを使用するメソッドがある場合に便利です。通常、パイプラインスクリプトで作成するすべてのオブジェクトはシリアル化可能でなければなりません(これは、Jenkinsがスクリプトの状態をシリアル化して一時停止してディスクに保存できる必要があるためです)。
メソッドに@NonCPS
を入力すると、ジェンキンスはメソッドを一気に実行し、一時停止することはできません。また、@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();
予想通り "キャッチ" のすべての印刷を。