Причина: java .io.NotSerializableException: org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval $ PendingScript - PullRequest
1 голос
/ 08 апреля 2020

В моем декларативном конвейере Jenkins я добавил код, который должен утверждать сценарии в соответствии с предложением здесь :

...
} catch (Exception jobFailed) {
   if (jobFailed.getMessage() == "script not yet approved for use") {
         echo("[WARNING] Changes in delivery job were automatically approved")
         approveDeliveryJob()
         return false
   }
...
@NonCPS
def approveDeliveryJob() {
    toApprove = ScriptApproval.get().getPendingScripts().collect()
    toApprove.each { pending -> ScriptApproval.get().approveScript(pending.getHash())} }
}
...

Как предлагается здесь

чтобы решить эту проблему, поместите весь код, который работает с непериализуемыми переменными, в @NonCPS аннотированную функцию

Чего мне не хватает?

1 Ответ

3 голосов
/ 08 апреля 2020
toApprove = ScriptApproval.get().getPendingScripts().collect()

Здесь вы сохраняете результат в привязке скрипта, которая зависит от сериализации.

Вместо этого вам нужна локальная переменная:

 def toApprove = ScriptApproval.get().getPendingScripts().collect()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...