我有一个多模块 maven 项目,其中包含嵌套的一些其他反应器子模块。结果,我有一个 3 级的模块层次结构。
过去我重构了层次结构,将一些嵌套模块从一个移动到另一个。我还修改了一些模块的名称。
在 Jenkins 上,旧模块(现在不存在)在构建报告中显示为“未运行”。当我在本地进行 Maven 安装时,这些模块不会出现在反应器摘要中。
这种行为是否以某种方式预期?我的意思是,詹金斯中是否有任何设置可以让反应堆运行者记住旧的子模块?
“构建开始前删除工作区”选项已启用。
如果由于某种原因,Delete All Disabled Modules不可用,那么您可以在Manage Jenkins -> Script Console ( https://<JENKINS_URL>/script
) 中运行这个 Groovy 脚本。基于我在 Jenkins Jira 上找到的脚本,并通过 Stack Overflow 上的反馈进行了改进。
import jenkins.model.Jenkins
import hudson.maven.MavenModuleSet
import hudson.model.Result
Jenkins.instance
.getAllItems(Job.class)
.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()
。副作用:过去仍具有该模块的任何存档构建将不再具有已删除的模块。在我的用例中,这是可以接受的。
您是否尝试过删除项目页面上配置和模块之间可用的所有已禁用模块的操作?
这是一个脚本,它将遍历所有 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()
并再次运行