Ответ 1
Пробовали ли вы действие Удалить все отключенные модули между Настроить и Модули на странице проекта?
У меня есть мультимодульный проект maven, который содержит вложенные некоторые другие подмодули реактора. В результате у меня есть иерархия модулей уровня 3.
В прошлом я рефакторировал иерархию, перемещая некоторые вложенные модули из одного в другой. Я также изменил имена некоторых модулей.
В Jenkins устаревшие модули - теперь невыполнимые - отображаются в отчете сборки как "не запускались". Когда я делаю локально установку maven, эти модули не отображаются в сводке реактора.
Является ли такое поведение каким-то образом ожидаемым? Я имею в виду, есть ли какие-либо настройки у дженкинсов, которые заставляют реактора бегун помнить старые подмодули?
Включена опция "Удалить рабочее пространство до начала сборки".
Пробовали ли вы действие Удалить все отключенные модули между Настроить и Модули на странице проекта?
Если по какой-либо причине Удалить все отключенные модули недоступно, вы можете запустить этот скрипт 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
на имя модуля, который вам больше не нуженПобочный эффект: любые архивные сборки, в которых этот модуль еще оставался, больше не будут иметь удаленный модуль. В моем случае это было приемлемо.
Вот скрипт, который обходит все задания 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()
и запустите его снова