我最近更新了我的哈德逊版本之一的配置。生成历史记录不同步。有什么方法可以清除我的构建历史记录?
谢谢,麻烦您了
我最近更新了我的哈德逊版本之一的配置。生成历史记录不同步。有什么方法可以清除我的构建历史记录?
谢谢,麻烦您了
Answers:
如果单击“从磁盘管理Hudson /重新加载配置”,Hudson将重新加载所有构建历史记录数据。
如果磁盘上的数据混乱,则需要转到%HUDSON_HOME%\ jobs \ < projectname >目录,并按预期方式还原构建目录。然后重新加载配置数据。
如果仅询问如何删除所有构建历史记录,则可以通过UI(如果仅有几个)逐个删除构建,或者转到%HUDSON_HOME%\ jobs \ < projectname >目录并删除所有子目录-它们对应于构建。之后,重新启动服务以使更改生效。
使用脚本控制台(“管理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()
这个答案是给詹金斯的
码:
def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
这是另一个选择:使用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/configure
Jenkins的页面中获取API令牌。只需单击“显示API令牌...”按钮即可显示用户名和API令牌。
编辑:根据配置或所用Jenkins的版本,可能必须在上面的URLdoDeleteAll
中用替换doDelete
以使其起作用。
您可以临时修改项目配置,以仅保存最近的1个版本,重新加载配置(这将破坏旧版本),然后再次将配置设置更改为所需的值。
如果要清除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()
}
这是可用的最佳选择。
Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }
此代码将删除所有Jenkins Job的构建历史记录。
使用脚本控制台。
如果将作业分组,则可以给全名加上正斜杠:
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()
直接从文件系统删除是不安全的。您可以运行以下脚本从所有作业中删除所有构建(递归地)。
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)
}
}
}
清理构建的另一种简便方法是在作业结束时添加“废弃旧插件”。设置要保存的最大构建数量,然后再次运行作业:
https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin
转到%HUDSON_HOME%\jobs\<projectname>
删除builds
目录并删除 lastStable, lastSuccessful
链接,然后删除nextBuildNumber
文件。
完成上述步骤后,从用户界面转到以下链接
Jenkins-> Manage Jenkins->从磁盘重新加载配置
它将根据您的需要进行