【问题标题】:Delete old builds for all jobs inside a folder from script console从脚本控制台删除文件夹内所有作业的旧版本
【发布时间】:2020-02-21 16:05:50
【问题描述】:

我想从脚本控制台删除我保存在文件夹中的所有作业的旧版本,而不是从 Jenkins 个人作业配置中删除旧版本。我只想保留最近的 10 个版本并删除旧版本。我问的是删除特定文件夹的旧版本,而不是另一个文件夹中的其他作业。

【问题讨论】:

  • 什么是“脚本控制台”?
  • Jenkins 脚本控制台允许运行 groovy 脚本/代码来自动化 jenkins 设置,例如安装插件、设置配置参数。这些 groovy 脚本可以通过 web ui 运行,也可以通过命令行使用 curl 将事件加载为脚本。

标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy jenkins-cli


【解决方案1】:

以下 groovy 脚本将删除所有构建,不包括 Jenkins 中配置的每个作业的 10 个最新构建。

import jenkins.model.*
import hudson.model.*


Jenkins.instance.getAllItems(AbstractItem.class).each { 
  def job = jenkins.model.Jenkins.instance.getItem(it.fullName)

  if (job!=null){
    println "job: " + job;  
    int i = 1;
    job.builds.each {
        def build = it;
        if (i<=10){
           println "build: " + build.displayName + " will NOT BE DELETED";
        }else{
           println "build: " + build.displayName + " will BE DELETED";
           it.delete(); 
        }
        i = ++i
    }
  } 
};

第一个循环将遍历所有 Jenkins 项目并将其存储在 job var 下。如果作业不是 Jenkins 作业,则结果可能为空,因此if (job!=null) 检查是为了允许代码仅针对 Jenkins 作业继续进行。

int i = 1; 是每个作业的计数器的初始化,当找到构建时递增。据我所知,构建顺序被保留,最近的构建在循环中首先返回。当计数器达到 10 或更多时,if..else 进入else 块并删除构建it.delete()

【讨论】:

  • 非常感谢您对我的问题的回答,但是如果我想删除特定文件夹的所有作业,而不是另一个文件夹中的作业。
  • it.fullName 将保存文件夹名称。您可以在if (job!=null) 之前使用 if/else 语句并决定要删除哪些文件夹
  • 不客气。如果它帮助您解决问题,请接受和/或投票回答。 :)
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 2016-06-07
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2017-10-07
相关资源
最近更新 更多