Как я могу обнаружить дополнительные причины моей сборки Jenkins?
При попытке запросить сборку с использованием groovy, я вызываю
myBuild.getCauses()
В интерфейсе Jenkins (экран сборки) я вижу, что эта сборка имеет две причины: UserIdCause и UpstreamCause. Однако, когда я опрашиваю ту же сборку с указанным выше groovy, я получаю только одну причину, то есть UserIdCause. Должен быть какой-то метод получения UpstreamCause из сборки, иначе он не будет присутствовать в пользовательском интерфейсе.
Я использую плагин Build Pipeline, чтобы вручную запускать сборки.
2 ответа
Похоже, что build.getCauses()
не получает все причины, а только причины первого causeAction
из build.getActions(hudson.model.CauseAction.class)
вероятно позвонив build.getAction(hudson.model.CauseAction.class)
Дополнительные действия с их собственной причиной можно найти с помощью:
def actions = build.getActions(hudson.model.CauseAction.class)
и поэтому мы должны рассмотреть причины каждого из этих действий, поэтому вместо def causes = build.causes()
у нас есть
def causes = build.getActions(hudson.model.CauseAction.class)
.collect{ it.getCauses() }.flatten()
и в моем случае это вернет список что-то вроде:
[ 05b8ef62-d071-11e8-b9db-9fd4e0aedf12/job/MyView/1238[11ef1ed2-d071-11e8-8c81-b71616102fe9/job/MyJob/4250[hudson.model.Cause$UserIdCause@2ddf7e3e]],
hudson.model.Cause$UserIdCause@3337c79c ]
Где первый член представляет плагин построения конвейера upstreamCause
и второй член представляет пользователя, который вручную запустил эту сборку.
Конечно, я бы хотел, чтобы плагин Build User Vars использовал самый неглубокий hudson.model.Cause$UserIdCause
, а не от какой-либо причины вверх по течению!
Точно так же нет смысла просто пересекать цепь cause.upstreamCauses
потому что каждый восходящий поток может иметь несколько причин.
Вместо повторения cause.upstreamCauses
, доступ upstreamRun
Вызывает действия, используя:
cause.upstreamRun.getActions(hudson.model.CauseAction.class).collect{ it.getCauses() }.flatten()
Замечания:
build.getCause(hudson.model.Cause$UserIdCause)
может вернуться NULL
где build.getCause(hudson.model.Cause$UpstreamCause)
будет успешным, даже когда существует действие от getActions()
чья причина Cause$UserIdCause
так предположительно getCause
также звонки getAction()
вместо getActions()
Вот рабочий Groovy код (я пытался в консоли сценария jenkins) для использования build.getAction
job = hudson.model.Hudson.instance.getItem("demo-job")
build = job.getLastBuild()
// get action first
def action = build.getAction(hudson.model.CauseAction.class)
// get the list of causes
for (cause in action.getCauses()) {
println cause.getShortDescription()
}
// another way to find specific UpsteamCause directly
cause = action.findCause(hudson.model.Cause.UpstreamCause.class)
println cause.getUpstreamRun()
Смотрите ссылку
- см. build-pipe-plugin, как добавить причину в коде BuildPipelineView.java
- см. API hudson.model.Cause