#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 за подробное объяснение!