如何清除我的Jenkins / Hudson建立历史?


87

我最近更新了我的哈德逊版本之一的配置。生成历史记录不同步。有什么方法可以清除我的构建历史记录?

谢谢,麻烦您了


您能否详细说明“完全搞砸了”?也许有人以前曾经遇到过类似的问题,并且可以指导您解决问题。
罗布·赫鲁斯卡

对含糊不清表示抱歉。固定。
myusuf3

有一个新的和稍微更具体的问题在这里:stackoverflow.com/questions/13052390/...
二万罗格朗


这里是最好的答案,我发现:superuser.com/questions/1418885/...
阿斯玛祖贝尔

Answers:


51

如果单击“从磁盘管理Hudson /重新加载配置”,Hudson将重新加载所有构建历史记录数据。

如果磁盘上的数据混乱,则需要转到%HUDSON_HOME%\ jobs \ < projectname >目录,并按预期方式还原构建目录。然后重新加载配置数据。

如果仅询问如何删除所有构建历史记录,则可以通过UI(如果仅有几个)逐个删除构建,或者转到%HUDSON_HOME%\ jobs \ < projectname >目录并删除所有子目录-它们对应于构建。之后,重新启动服务以使更改生效。


我已经删除了“ / var / lib / jenkins / jobs / Demo”中的所有文件和文件夹,但是当我进入该Job内的Jenkins UI时,我仍然看到构建历史记录。
paul 2014年

1
使用目录结构“猴子”后,只需转到“管理Jenkins”并选择“从磁盘重新加载配置”
DanBaker 2014年

1
@paul,删除那里的文件夹后,需要重新启动Jenkins才能看到构建历史记录从UI中消失了。顺便说一句,如果我们使用的是Jenkins,则路径通常位于/ var / jenkins_home / jobs / {项目名称} / builds /
Bright Bright

我认为此解决方案需要在系统方面采取许多步骤,@ Nayana Adassuriya的回答中提供了更加简洁的解决方案
lfn

107

使用脚本控制台(“管理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()

5
大!!绝对是最好的方法!:)
hek2mgl

绝招,但如何重置构建计数器?任何脚本吗?
Jes Chergui,2015年

1
@JesChergui我已更新为显示重置内部版本号。脚本控制台使您可以控制各种事情,请参见javadoc.jenkins-ci.org(AbstractProject是开始从事工作的好地方)
rjohnston

我的詹金斯(Jenkins)抱怨说不允许它访问实例或类似实例。我从专门为此删除设置的新管道中运行它,然后粘贴了上面的代码并更改了名称。
威尔

@Will这归因于脚本安全性插件,该插件将管道作业放入超级限制性沙箱中。在“管理Jenkins”>“进程内脚本批准”下查看您是否有要签名的签名。另一个选择是使用Scriptler插件在工作中运行管理脚本的能力:wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

这个答案是给詹金斯的

  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()

我的帖子


4
迄今为止最好的答案
德米特里·扎伊采夫2016年

1
这是最快的解决方案。
davegallant 2016年

是的,但是对于这个,不要重启Jenkins,否则在重启后进行构建时似乎不会将nextbuildnumber更新为1。我的矿工始于39岁,所以我不得不重做。
威尔

从詹金斯(Jenkins)2.75
埃勒尔(Eall)'17年

22

这是另一个选择:使用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

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

编辑:根据配置或所用Jenkins的版本,可能必须在上面的URLdoDeleteAll中用替换doDelete以使其起作用。


10

这是使用Jenkins脚本删除所有作业的所有建筑物的方法。

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 

9

您可以临时修改项目配置,以仅保存最近的1个版本,重新加载配置(这将破坏旧版本),然后再次将配置设置更改为所需的值。


对不起,还没有使用哈德森现在一两年,但看到这对重装配置:stackoverflow.com/questions/5216552/...
the_mandrill

作为没有对Jenkins的管理员权限的人,这是唯一对我有用的选项。
DrStrangepork

4

如果要清除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()
}

4

这是可用的最佳选择。

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

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


2
对于想知道如何运行上述代码的任何人,请转至Jenkins主页>管理Jenkins>脚本控制台。您将在其中输入一个文本字段。
法老王工具

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()

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)
    }
  }
}


1

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

完成上述步骤后,从用户界面转到以下链接
Jenkins-> Manage Jenkins->从磁盘重新加载配置

它将根据您的需要进行


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)

0

导航: %JENKINS_HOME%\jobs\jobName

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.