反应堆项目中不再存在的Maven模块在Jenkins构建报告中显示为"未运行"

die*_*sis 17 maven jenkins

我有一个多模块maven项目,其中包含嵌套的其他一些reactor子模块.结果,我有一个3级模块层次结构.

在过去,我重构了层次结构,将一些嵌套模块从一个移动到另一个.我修改了一些模块的名称.

在Jenkins上,旧模块 - 现在不存在 - 在构建报告中显示为"未运行".当我在本地进行maven安装时,这些模块不会出现在reactor摘要中.

这种行为是以某种方式预期的?我的意思是,在jenkins中是否有任何设置使反应堆转轮记住旧的子模块?

启用"在构建开始之前删除工作空间"选项.

Ame*_*sse 17

如果由于某种原因,删除所有已禁用的模块不可用,则可以在Manage Jenkins - > Script Console中运行此Groovy脚本.

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("");
    }    
  }  
}
Run Code Online (Sandbox Code Playgroud)

如何使用:

  • 首先运行脚本而不进行任何编辑(这是安全的,真的!)
  • 浏览模块列表以找到要删除的模块
  • 将占位符替换为someModuleYouNoLongerWant您不再需要的模块的名称
  • 再次运行(已编辑)脚本

副作用:过去仍然具有该模块的任何归档构建将不再具有已删除的模块.在我的用例中,这是可以接受的.


Jea*_*end 16

您是否尝试过在项目页面上配置模块之间可用的删除所有已禁用模块的操作?

  • 如果该操作没有出现在页面上怎么办? (6认同)
  • 我也没有这个选择.有谁知道如何启用它? (4认同)

vis*_*985 6

这是一个脚本,它将遍历所有 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
Run Code Online (Sandbox Code Playgroud)

如何使用:

  • 无需编辑即可运行
  • 浏览更改列表以检查不需要的删除
  • 取消注释module.delete()并再次运行它