我有一个多模块maven项目,其中包含嵌套的其他一些reactor子模块。结果,我有一个3级模块层次结构。
在过去,我重构了层次结构,将一些嵌套模块从一个移动到另一个。我也修改了一些模块的名称。
在Jenkins上,旧模块 - 现在不存在 - 在构建报告中显示为“未运行”。当我在本地进行maven安装时,这些模块不会出现在反应堆摘要中。
这种行为是以某种方式预期的吗? 我的意思是,jenkins中是否有任何设置使反应堆转轮记住旧的子模块?
启用“在构建开始之前删除工作区”选项。
答案 0 :(得分:17)
如果由于某种原因,删除所有已禁用的模块不可用,则您可以在管理Jenkins - >中运行this Groovy script 脚本控制台。
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
替换为您不再需要的模块名称副作用:过去仍然拥有该模块的任何归档版本将不再具有已删除的模块。在我的用例中,这是可以接受的。
答案 1 :(得分:16)
您是否在项目页面上尝试了配置和模块之间的删除所有已禁用模块操作?
答案 2 :(得分:0)
这是一个脚本,它将遍历所有maven作业,并删除所有在上次成功构建中未运行的模块。
header-includes: |
```{=latex}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\lhead{My Title}
\rhead{My Note}
\lfoot{\today}\rfoot{Page \thepage}
```
使用方法:
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
,然后再次运行