89

我最近更新了我的一个 hudson 版本的配置。构建历史不同步。有没有办法清除我的构建历史?

谢谢,麻烦您了

4

15 回答 15

116

使用脚本控制台(管理 Jenkins > 脚本控制台)和类似这个脚本的东西来批量删除作业的构建历史https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

该脚本假定您只想删除一系列构建。要删除给定作业的所有构建,请使用此(已测试):

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()
于 2013-07-31T07:32:16.247 回答
82

这个答案是给詹金斯的

  1. 转到您的 Jenkins 主页 →管理 Jenkins脚本控制台

    在此处输入图像描述

  2. 在那里运行以下脚本。更改copy_folderyour project name

代码:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

我的帖子

于 2016-06-28T06:36:31.487 回答
51

如果您单击 Manage Hudson / Reload Configuration From Disk,Hudson 将重新加载所有构建历史数据。

如果磁盘上的数据被弄乱了,你需要去你的 %HUDSON_HOME%\jobs\< projectname > 目录并恢复它们应该是的构建目录。然后重新加载配置数据。

如果您只是询问如何删除所有构建历史,如果只有少数,您可以通过 UI 一个一个地删除构建,或者转到 %HUDSON_HOME%\jobs\< projectname > 目录并删除所有那里的子目录——它们对应于构建。然后重新启动服务以使更改生效。

于 2010-08-04T21:57:25.090 回答
23

这是另一种选择:使用 cURL 删除构建。

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

上面删除了作业 myJob 的构建 #1 到 #56。

如果在 Jenkins 实例上启用了身份验证,则必须提供用户名和 API 令牌,如下所示:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

API 令牌必须从/me/configureJenkins 的页面中获取。只需单击“显示 API 令牌...”按钮即可显示用户名和 API 令牌。

编辑:根据配置或使用的 Jenkins 版本,可能必须在上面的 URL 中替换doDeleteAll为才能使这项工作正常进行。doDelete

于 2014-03-10T14:40:42.580 回答
11

以下是如何使用 Jenkins 脚本删除 ALL BUILDS FOR ALL JOBS……。

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
于 2015-05-05T19:32:29.887 回答
9

您可以临时修改项目配置以仅保存最后 1 个构建,重新加载配置(这应该丢弃旧构建),然后再次将配置设置更改为您想要的值。

于 2010-08-04T22:16:20.837 回答
6

如果您想清除 MultiBranchProject 的构建历史(例如管道),请转到您的 Jenkins 主页 → 管理 Jenkins → 脚本控制台并运行以下脚本:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}
于 2018-08-15T10:38:02.993 回答
6

这是可用的最佳选择。

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

此代码将删除所有 Jenkins Job 构建历史记录。

于 2018-09-03T08:07:31.470 回答
2

使用脚本控制台。

如果作业被分组,则可以使用正斜杠给它一个全名:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

或像这样遍历层次结构:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
于 2018-06-08T16:30:23.227 回答
2

直接从文件系统中删除是不安全的。您可以运行以下脚本以从所有作业中删除所有构建(递归)。

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}
于 2019-07-19T12:52:40.607 回答
2

转到“管理 Jenkins”>“脚本控制台”

下面运行:

def jobName = "build_name"  
def job = Jenkins.instance.getItem(jobName)  
job.getBuilds().each { it.delete() }  
job.save()
于 2021-02-22T13:45:41.890 回答
1

另一种清理构建的简单方法是在工作结束时添加丢弃旧插件。设置要保存的最大构建数,然后再次运行作业:

https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin

于 2015-03-03T13:11:34.177 回答
1

转到%HUDSON_HOME%\jobs\<projectname>删除builds目录并删除 lastStable, lastSuccessful链接,然后删除nextBuildNumber文件。


完成上述步骤后,从 UI Jenkins-> Manage Jenkins -> Reload Configuration from Disk转到以下链接

它会按你的需要做

于 2016-05-03T07:51:26.733 回答
1

如果使用脚本控制台方法,请尝试使用以下方法来考虑是否将作业分组到文件夹容器中。

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

或者

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
于 2017-04-24T15:08:12.843 回答
0

导航:%JENKINS_HOME%\jobs\jobName

打开文件“nextBuildNumber”并更改编号。之后重新加载 Jenkins 配置。注意:“nextBuildNumber”文件包含 Jenkins 将使用的下一个版本号。

于 2014-10-08T19:53:05.200 回答