Как получить $ПРИЧИНА в рабочем процессе
Jenkins имеет переменную $CAUSE, доступную для заданий сборки фристайла.
Как я могу получить доступ к этому или что-то подобное в рабочем процессе?
Моя команда использует его в выводах электронной почты существующих ad-hoc-сборок. Мы хотели бы продолжить то же самое в новых рабочих задачах на рабочем столе.
Ответы
Ответ 1
Похоже, что в сборках Workflow не указана эта переменная.
Однако вы можете получить необходимую информацию из объекта currentBuild.rawBuild
, используя hudson.model.Run.getCause() или hudson.model.Run.getCauses() метод.
Пример:
Рабочий процесс script:
println "CAUSE ${currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause).properties}"
результат с этим выходом:
Running: Print Message
CAUSE [userName:John Smith, userId:jsmith, class:class hudson.model.Cause$UserIdCause, shortDescription:Started by user John Smith]
Другие подтипы причины можно найти в javadoc.
Существует также хороший get-build-cause пример, основанный на этом ответе в jenkins Конвейерные примеры.
Ответ 2
Я отвечаю на ответ Jazzschmidt, потому что мне просто не хватает репутации...
previousBuild делает неправильную вещь, поскольку она получает ранее запущенную работу того же типа, а не работу, которая запускала текущий. Если эта работа была впервые запущена кем-то, тем, кого вы получите. В противном случае ответ будет NULL, который затем вызовет исключение, пытающееся получить его userId.
Чтобы получить "оригинальную" причину, вам нужно пройти по причинам, используя UpstreamCause. Это то, что я закончил, хотя могут быть и другие способы:
@NonCPS
def getCauser() {
def build = currentBuild.rawBuild
def upstreamCause
while(upstreamCause = build.getCause(hudson.model.Cause$UpstreamCause)) {
build = upstreamCause.upstreamRun
}
return build.getCause(hudson.model.Cause$UserIdCause).userId
}
Ответ 3
Я думаю, вы говорите о макросе, определенном в Email Ext плагин. Существует текущая работа, чтобы плагин напрямую поддерживал Workflow. Я не уверен в статусе этого конкретного макроса.
Ответ 4
Если сборка инициируется восходящей сборкой, вам нужно пройти иерархию currentBuild
.
Например:
println getCauser(currentBuild).userId
@NonCPS
def getCauser(def build) {
while(build.previousBuild) {
build = build.previousBuild
}
return build.rawBuild.getCause(hudson.model.Cause$UserIdCause)
}
Это вернет идентификатор пользователя исходной причины пользователя.