我最近更新了我的一个hudson版本的配置。构建历史记录不同步。有没有办法清除我的构建历史记录?
请,谢谢
答案 0 :(得分:93)
使用脚本控制台(管理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()
答案 1 :(得分:63)
这个答案适用于Jenkins
转到Jenkins主页→管理Jenkins →脚本控制台
在那里运行以下脚本。将copy_folder
更改为your project name
代码:
def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
答案 2 :(得分:45)
如果单击Manage Hudson / Reload Configuration From Disk,Hudson将重新加载所有构建历史数据。
如果磁盘上的数据搞砸了,您需要转到%HUDSON_HOME%\ jobs \< projectname >目录并恢复构建目录,因为它们应该是。然后重新加载配置数据。
如果您只是询问如何删除所有构建历史记录,您可以通过UI逐个删除构建(如果只有几个),或者转到%HUDSON_HOME%\ jobs \< 项目名称>目录并删除那里的所有子目录 - 它们对应于构建。 然后重新启动服务以使更改生效。
答案 3 :(得分:20)
这是另一种选择:用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
必须从Jenkins的/me/configure
页面获取API令牌。只需单击“Show API Token ...”按钮即可显示用户名和API令牌。
修改:可能必须在上面的网址中用doDeleteAll
替换doDelete
才能使其正常工作,具体取决于所使用的Jenkins的配置或版本。
答案 4 :(得分:9)
您可以临时修改项目配置以仅保存最后1个版本,重新加载配置(应该删除旧版本),然后再次将配置设置更改为所需的值。
答案 5 :(得分:8)
以下是如何使用Jenkins Scripting删除所有作业的所有BUIL ......
def jobs = Jenkins.instance.projects.collect { it }
jobs.each { job -> job.getBuilds().each { it.delete() }}
答案 6 :(得分:4)
这是最好的选择。
Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }
此代码将删除所有Jenkins Job的构建历史记录。
答案 7 :(得分:2)
如果您要清除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()
}
答案 8 :(得分:1)
清理构建的另一种简单方法是在作业结束时添加Discard Old Plugin。设置要保存的最大构建数,然后再次运行作业:
https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin
答案 9 :(得分:1)
转到%HUDSON_HOME%\jobs\<projectname>
删除builds
目录并删除lastStable, lastSuccessful
个链接,然后删除nextBuildNumber
个文件。
完成上述步骤后,从UI中转到以下链接 Jenkins-&GT;管理Jenkins - &gt;从磁盘重新加载配置
它将按您的需要进行
答案 10 :(得分: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)
答案 11 :(得分:1)
直接从文件系统删除是不安全的。您可以运行以下脚本从所有作业中删除所有构建(递归地)。
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)
}
}
}```
答案 12 :(得分:1)
转到“管理 Jenkins”>“脚本控制台”
在下面运行:
def jobName = "build_name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.save()
答案 13 :(得分:0)
导航至:%JENKINS_HOME%\jobs\jobName
打开文件“nextBuildNumber”并更改数字。之后重新加载Jenkins配置。注意:“nextBuildNumber”文件包含Jenkins将使用的下一个构建no。
答案 14 :(得分:0)
使用脚本控制台。
如果作业已分组,则可以使用正斜杠为其指定全名:
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()