Jenkinsfile: «RejectedAccessException: такое поле не найдено» в блоке catch - PullRequest
2 голосов
/ 27 апреля 2020

Я пытаюсь добавить функцию ввода статуса в мой сценический код Jenkins. Но он выдает:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: не найдено такое поле:

Я пытался записать этот блок как

catch (org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException e) {
    cause = e.causes.get(0)
    echo "Aborted by " + cause.getUser().toString()
    if (cause.getUser().toString() != 'SYSTEM') {
    startMillis = System.currentTimeMillis()
    userAborted = true
    } else {
      endMillis = System.currentTimeMillis()
    if (endMillis - startMillis >= timeoutMillis) {
          echo "Approval timed out. Aborting the deployment."
      userAborted = true
    } else {
          echo "SYSTEM aborted, but looks like timeout period didn't complete. Aborting."
          userAborted = true
        }
    }
  } 

но с этим кодом, когда я прерывал работу, оно застревало.

, поэтому я изменил код, приведенный ниже: -

catch (Exception e) {
    cause = e.causes.get(0)
    echo "Aborted by " + cause.getUser().toString()
    if (cause.getUser().toString() != 'SYSTEM') {
    startMillis = System.currentTimeMillis()
    userAborted = true
    } else {
      endMillis = System.currentTimeMillis()
    if (endMillis - startMillis >= timeoutMillis) {
          echo "Approval timed out. Aborting the deployment."
      userAborted = true
    } else {
          echo "SYSTEM aborted, but looks like timeout period didn't complete. Aborting."
          userAborted = true
        }
    }
  } 

Теперь работа не застревает при прерывании, но снова выдает эту ошибку при сбое задания:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Такое поле не найдено:

1 Ответ

1 голос
/ 27 апреля 2020

После проверки API RejectedAccessException (найдено здесь ) я думаю, что проблема e.causes.get(0).

causes не является полем RejectedAccessException, как говорит исключение, поэтому вы не можете получить к нему доступ явно.

API предлагает метод getCause() из java.lang.Throwable который можно использовать:

cause = e.getCause()

Кстати getUser() также не является методом исключения и вызовет то же исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...