#jenkins #jenkins-plugins
#дженкинс #jenkins-плагины
Вопрос:
У меня установлен плагин Build Failure Analyzer в моем экземпляре Jenkins, и у меня есть несколько различных сбоев, введенных в плагин. Кто-нибудь знает, возможно ли получить общее количество сбоев по всем заданиям, имеющим одну и ту же причину?
Например, я иногда получаю сбои «ChannelClosedException», если узел сборки неожиданно отключается во время сборки или тестирования, и я хотел бы определить, как часто это происходит во всех моих заданиях. Есть ли какой-нибудь способ агрегировать это значение? Я полагаю, это можно было бы сделать с помощью groovy, если вы можете перебирать каждую сборку для каждого задания и собирать причину сбоя сборки, если таковая обнаружена.
Кто-нибудь еще делал что-то подобное раньше?
Ответ №1:
Не точный ответ… но должна быть возможность изменять, чтобы получить то, что вы ищете:
Jenkins.instance.getAllItems(Job).each{
def jobBuilds=it.getBuilds()
//for each job get the things (you can limit at your convenience)
jobBuilds.each { build ->
def runningSince = groovy.time.TimeCategory.minus( new Date(), build.getTime() )
def currentStatus = build.buildStatusSummary.message
def cause = build.getCauses()[0] //we keep the first cause
def user = cause instanceof Cause.UserIdCause? cause.getUserId():""
println "Build: ${build} | Since: ${runningSince} | Status: ${currentStatus} | Cause: ${cause} | User: ${user}"
def parameters = build.getAction(ParametersAction)?.parameters
parameters.each {
println "Type: ${it.class} Name: ${it.name}, Value: ${it.dump()}"
}
}
}
Ответ №2:
Используя некоторые google-fu и некоторую информацию из VinDev, я придумал это решение:
// get all jobs in Jenkins
Jenkins.instance.getAllItems(Job).each {
// get all builds for each job
def jobBuilds=it.getBuilds()
//for each build, get the name and status and failure messages
jobBuilds.each { build ->
// get the build status
def currentStatus = build.buildStatusSummary.message
// we only care about the broken builds because we want failure messages
if (currentStatus.contains("broken")) {
println "Build: ${build} | Status: ${currentStatus}"
def BFA = build.actions.find{ it instanceof com.sonyericsson.jenkins.plugins.bfa.model.FailureCauseBuildAction };
if (BFA != null) {
for (failureCause in BFA.getFoundFailureCauses()) {
println("name: " failureCause.getName() ", description: " failureCause.getDescription())
}
}
}
}
}