如何清除Jenkins / Hudson构建历史记录?

jenkins continuous-integration hudson build-automation

94819 观看

14回复

8208 作者的声誉

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

谢谢,麻烦您了

作者: myusuf3 的来源 发布者: 2010 年 8 月 4 日

回应 (14)


45

9393 作者的声誉

决定

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

如果磁盘上的数据搞砸了,您需要转到%HUDSON_HOME%\ jobs \ < projectname >目录并恢复构建目录,因为它们应该是。然后重新加载配置数据。

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

作者: William Leara 发布者: 04.08.2010 09:57

9

23494 作者的声誉

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

作者: the_mandrill 发布者: 04.08.2010 10:16

95

4908 作者的声誉

使用脚本控制台(管理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()
作者: rjohnston 发布者: 31.07.2013 07:32

20

3175 作者的声誉

这是另一种选择:使用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令牌。只需单击“Show API Token ...”按钮即可显示用户名和API令牌。

编辑:一个可能需要更换doDeleteAlldoDelete在上面的网址,使这项工作,根据配置或使用的詹金斯的版本。

作者: Erwan Legrand 发布者: 10.03.2014 02:40

0

1 作者的声誉

导航: %JENKINS_HOME%\jobs\jobName

打开文件“nextBuildNumber”并更改数字。之后重新加载Jenkins配置。注意:“nextBuildNumber”文件包含Jenkins将使用的下一个构建no。

作者: Nitish 发布者: 08.10.2014 07:53

1

1298 作者的声誉

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

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

作者: Rutger Huijsmans 发布者: 03.03.2015 01:11

9

1974 作者的声誉

以下是如何使用Jenkins Scripting删除所有作业的所有BUILDS ......

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
作者: ort11 发布者: 05.05.2015 07:32

1

579 作者的声誉

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

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

它会按你的需要做

作者: Manish Agrawal 发布者: 03.05.2016 07:51

64

12769 作者的声誉

这个答案适用于詹金斯

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

我的帖子

作者: Nayana Adassuriya 发布者: 28.06.2016 06:36

1

21 作者的声誉

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

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

要么

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
作者: RampantBadger 发布者: 24.04.2017 03:08

1

3231 作者的声誉

使用脚本控制台。

如果作业已分组,则可以使用正斜杠为其指定全名:

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()
作者: ATrubka 发布者: 08.06.2018 04:30

2

21 作者的声誉

如果要清除MultiBranchProject的构建历史(例如管道),请转到Jenkins主页→Manage Jenkins→Script Console并运行以下脚本:

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()
}
作者: Marin Ivanov 发布者: 15.08.2018 10:38

4

192 作者的声誉

这是最好的选择。

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

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

作者: Rahul khanvani 发布者: 03.09.2018 08:07

0

21 作者的声誉

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

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(0).delete()
      println "Deleted" + builds.get(0)
    }
  }
}```
作者: Aytunc Beken 发布者: 19.07.2019 12:52
32x32