Модули Maven, которые больше не существуют в проекте реактора, появляются в отчете по сборке Jenkins как "не запускались",

У меня есть мультимодульный проект maven, который содержит вложенные некоторые другие подмодули реактора. В результате у меня есть иерархия модулей уровня 3.

В прошлом я рефакторировал иерархию, перемещая некоторые вложенные модули из одного в другой. Я также изменил имена некоторых модулей.

В Jenkins устаревшие модули - теперь невыполнимые - отображаются в отчете сборки как "не запускались". Когда я делаю локально установку maven, эти модули не отображаются в сводке реактора.

Является ли такое поведение каким-то образом ожидаемым? Я имею в виду, есть ли какие-либо настройки у дженкинсов, которые заставляют реактора бегун помнить старые подмодули?

Включена опция "Удалить рабочее пространство до начала сборки".

Ответы

Ответ 1

Пробовали ли вы действие Удалить все отключенные модули между Настроить и Модули на странице проекта?

Ответ 2

Если по какой-либо причине Удалить все отключенные модули недоступно, вы можете запустить этот скрипт Groovy в разделе "Управление JenkinsКонсоль скрипта".

import hudson.model.*
import hudson.maven.*

hudson.model.Hudson.instance.items.findAll{job -> job instanceof MavenModuleSet}.each {

  job ->
  println("Job: " + job.name)  
  job.getModules().each {
    module ->
    print("  " + module.name + " (disabled = " + module.disabled + ")")
    if ("someModuleYouNoLongerWant".equals(module.name)) {
      module.delete() 
      println(" <-- deleted module " + module.name)
    } else {
      println("");
    }    
  }  
}

Как пользоваться:

  • Сначала запустите скрипт без каких-либо правок (это действительно безопасно!)
  • Просмотрите список модулей, чтобы найти тот, который вы хотите удалить.
  • Замените заполнитель someModuleYouNoLongerWant на имя модуля, который вам больше не нужен
  • Запустите (отредактированный) скрипт снова

Побочный эффект: любые архивные сборки, в которых этот модуль еще оставался, больше не будут иметь удаленный модуль. В моем случае это было приемлемо.

Ответ 3

Вот скрипт, который обходит все задания maven и удаляет все модули, которые не запускались при последней успешной сборке.

import jenkins.model.Jenkins
import hudson.maven.MavenModuleSet
import hudson.model.Result

Jenkins.instance.items.findAll({job -> job instanceof MavenModuleSet}).each {
  job ->
    build = job.getLastBuild()
    if(build && build.getResult() == Result.SUCCESS) {
      println("==> Processing job " + job.name)
      build.getModuleBuilds().each {
        module, build ->
          if(build.isEmpty()) {
            //module.delete()
            println("    --> Deleted module " + module.name)
          }
      }
    } else {
      println("Warning: Skipped job " + job.name + " because its last build failed.")
    }
}

return null

Как пользоваться:

  • Запустите его без правок
  • Просмотрите список изменений, чтобы проверить наличие нежелательных удалений.
  • module.delete() и запустите его снова