Как получить количество неудачных сборок по причине с Дженкинс - PullRequest
0 голосов
/ 05 марта 2019

У меня установлен плагин Build Failure Analyzer, установленный в моем экземпляре Jenkins, и у меня есть несколько различных сбоев, введенных в плагин. Кто-нибудь знает, возможно ли получить общее количество отказов по всем заданиям, имеющим одинаковую причину?

Например, я иногда получаю сбои "ChannelClosedException", если узел сборки отключается во время сборки или неожиданно тестируется, и я хотел бы определить, как часто это происходит во всех моих заданиях. Есть ли способ агрегировать это значение? Я полагаю, что это можно сделать с помощью Groovy, если вы можете перебирать каждую сборку для каждого задания и собирать причину сбоя сборки, если она обнаружена.

Кто-нибудь еще делал что-то подобное раньше?

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Не точный ответ ... но должен иметь возможность изменить, чтобы получить то, что вы ищете:

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()}" 

            }
        }
    }
0 голосов
/ 06 марта 2019

Используя некоторые 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())
              }
          }
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...