Gördüğünüz istisna script security ve kum havuzundan kaynaklanıyor. Temel olarak, varsayılan olarak, bir boru hattı komut dosyasını çalıştırdığınızda, yalnızca belirli yöntemlerin ve sınıfların kullanımına izin veren bir sanal alanda çalışır. İşlemleri beyaz listeye eklemenin yolları vardır, yukarıdaki bağlantıyı kontrol edin.
@NonCPS
ek açıklaması, serileştirilemeyen nesneleri kullanan yöntemleriniz olduğunda kullanışlıdır. Normal olarak, pipeline komut dosyanızda oluşturduğunuz tüm nesnelerin serileştirilmesi gerekir (bunun nedeni, Jenkins'in komut dosyasının durumunu, disk üzerinde duraklatılıp depolanabilmesi için serileştirebilmesidir).
@NonCPS
yöntemini bir yönteme yerleştirdiğinizde, Jenkins tüm yöntemi bir seferde duraklatma özelliği olmadan yürütür. Ayrıca, bir @NonCPS
açıklamalı yöntem dahilinde herhangi bir boru hattı adımı veya CPS dönüştürülmüş yöntemine başvurmanıza izin verilmez. More information about this can be found here.
İstisna işlemi ile ilgili olarak: Ne yaşadığınızdan% 100 emin değilsiniz; Ben aşağıdaki denedim ve beklendiği gibi çalışır:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
ve
@NonCPS
def myFunction() {
throw new RuntimeException();
}
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
ve son olarak:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
beklendiği gibi "yakalandı" Tüm baskı.