Сбой сборки без ошибок при запуске пользователем

#jenkins #jenkins-pipeline #jenkins-groovy

#дженкинс #дженкинс-конвейер #дженкинс- заводной

Вопрос:

У меня есть следующий конвейер, в котором я пытаюсь найти пользователя, который его запустил —

 isStartedByUser = currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause)

pipeline {
    agent {
        label {
            label "<node-name>"
        }
    }
    stages {
        stage('Testing') {
            steps {
                script {
        println "Started by "   isStartedByUser
                }
            }

        }
    }
}
  

При запуске сборки она помечается как сбой, но в выводе консоли ошибки нет —

 Started by hudson.model.Cause$UserIdCause@f42b6809
[Pipeline] }
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] }
[Pipeline] End of Pipeline
Finished: FAILURE
  

Пожалуйста, помогите понять, почему это происходит без проблем.

Ответ №1:

Тип возвращаемого объекта currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause) is model.hudson.Cause , который не является сериализуемым. Ссылка: https://javadoc.jenkins-ci.org/hudson/model/Cause.html (Он не реализует Serializable интерфейс)

В зависимости от ваших потребностей вы можете просто добавить a toString() для решения вашей проблемы или поместить его в отдельный метод:

toString():

 isStartedByUser = currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause).toString()
  

Метод:

 def getCause() {
    return currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause);
}
  

Исходное исключение было выдано, но по какой-то причине проглочено. Вы можете доказать это, добавив блок environment в свой конвейер. Выполнив конвейер, вы увидите исключение.

 environment {
        isStartedByUser = currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause)
    }
  

Комментарии:

1. Спасибо @ Jns за подробное объяснение!