hudson - 如何触发手动清理 Hudson 工作区

标签 hudson

我们有一个包含八个节点的 Hudson 集群。当某个特定的代码分支不再处于事件状态时,我们会禁用构建作业,但该作业的工作区仍然会占用所有节点上的空间。

我正在寻找一种在所有节点上触发工作区清理的方法。请注意,我不是在寻找“构建前干净的工作区”解决方案。

最佳答案

您不需要编写插件。您可以编写使用 Groovy plugin 的作业编写一个 Groovy 系统脚本。比如说,这项工作每晚都会运行。它将识别禁用的项目并清除其工作区。这是指向 Hudson Model API 的链接您的脚本将使用。在 http://<hudson-server>/script 有一个 Groovy 脚本控制台这对调试非常有用。

这是一个应该对您有直接好处的代码片段。在脚本控制台中运行它并检查输出:

def hi = hudson.model.Hudson.instance
hi.getItems(hudson.model.Job).each {
  job ->
    println(job.displayName)
    println(job.isDisabled())
    println(job.workspace)
}

您还可以在 this answer 中找到代码片段有用。他们指的是 Jenkins API,但在这个层面上,我认为 Jenkins 和 Hudson 之间没有区别。

更新:

以下是在多个从站上执行此操作的方法:创建一个在所有从站上运行的多配置作业(也称为“矩阵作业”)。在每个从站上,以下系统 Groovy 脚本将为您提供每个作业在该从站上的工作区(以及启用/禁用标志):
def hi = hudson.model.Hudson.instance

def thr = Thread.currentThread()
def build = thr?.executable
def node = build.executor.owner.node

hi.getItems(hudson.model.Job).each {
  job ->
    println("---------")
    println(job.displayName)
    println(job.isDisabled())
    println(node.getWorkspaceFor(job))
  }

当脚本在从站本身上运行时,您可以直接从中清除工作区。当然,工作空间可能不存在,但这不是问题。请注意,您只编写一次脚本 - Jenkins 将自动在您在矩阵作业中指定的所有从站上运行它。

关于hudson - 如何触发手动清理 Hudson 工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11387762/

相关文章:

hudson - 有可能让 Hudson 对轻微的网络故障更有弹性吗?

Jenkins/构建工作流程 : Provide result of one parallel executed job to multiple jobs

eclipse - 使用 Jenkins/Hudson 的集成管理器 Git 工作流

svn - 如何设置 jenkins 从 SVN 自动结账?

git - Hudson Build 使用 GitHub 被卡住

ldap - 如何配置 Jenkins/Hudson 在 Snow Leopard 服务器上使用 LDAP

java - 如果违反 Sonar 阈值,如何使 Hudson/Jenkins 失败?

configuration - 如何设置授权 Hudson/Jenkins 以克隆您的 mercurial 存储库

terminal - 如何从终端更新jenkins插件?

mercurial - 在 Hudson 中构建一个特定的修订版?