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

Posted

技术标签:

【中文标题】如何清除我的 Jenkins/Hudson 构建历史?【英文标题】:How do I clear my Jenkins/Hudson build history? 【发布时间】:2011-03-25 12:28:47 【问题描述】:

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

请和谢谢

【问题讨论】:

你能详细说明“完全搞砸了”吗?也许有人以前遇到过类似的问题,可以指导您如何解决。 抱歉有歧义。固定。 这里有一个更新的、更具体的问题:***.com/questions/13052390/… 这篇文章可能对codeketchup.blogspot.sg/2016/05/…有帮助 这是我找到的最佳答案:superuser.com/questions/1418885/… 【参考方案1】:

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

如果磁盘上的数据混乱,您需要转到 %HUDSON_HOME%\jobs\projectname> 目录并恢复构建目录应有的状态。然后重新加载配置数据。

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

【讨论】:

我已经删除了“/var/lib/jenkins/jobs/Demo”中的所有文件和文件夹,但是当我进入这个 JOB 中的 Jenkins UI 时,我仍然可以看到构建历史记录。 使用目录结构“猴子”后,只需转到“管理 Jenkins”并选择“从磁盘重新加载配置” @paul,删除那里的文件夹后,需要 重新启动 Jenkins 才能看到构建历史从 UI 中消失。顺便说一句,如果我们使用 Jenkins,路径通常位于 /var/jenkins_home/jobs/project name/builds/ 我认为这个解决方案需要在系统方面采取很多步骤,@Nayana Adassuriya 的回答中提供了一个更干净的解决方案【参考方案2】:

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

【讨论】:

抱歉,已经有几年没有使用 Hudson 了,但是请参阅有关重新加载配置的信息:***.com/questions/5216552/… 作为没有 Jenkins 管理员权限的人,这是唯一适合我的选择。【参考方案3】:

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

【讨论】:

太棒了!绝对是最好的方法! :) 很棒的技巧,但是重置构建计数器怎么样?有任何脚本吗? @JesChergui 我已经更新以显示重置内部版本号。脚本控制台可以让你控制各种事情,见javadoc.jenkins-ci.org(AbstractProject 是一个开始玩作业的好地方) 我的 Jenkins 抱怨它不允许访问实例等。我是从专门为此删除设置的新管道运行它,我粘贴了上面的代码并更改了名称。 @Will 这是由于脚本安全插件将管道作业置于超级限制性沙箱中。在“管理 Jenkins”>“正在进行的脚本批准”下查看您是否有要批准的签名。另一种选择是使用 Scriptler 插件在作业中运行管理脚本的能力:wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin【参考方案4】:

这是另一个选项:使用 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 令牌必须从 Jenkins 的 /me/configure 页面获取。只需单击“显示 API 令牌...”按钮即可显示用户名和 API 令牌。

编辑:根据配置或使用的 Jenkins 版本,可能需要将上述 URL 中的 doDeleteAll 替换为 doDelete 才能正常工作。

【讨论】:

【参考方案5】:

导航到:%JENKINS_HOME%\jobs\jobName

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

这里是如何使用 Jenkins 脚本删除所有 JOBS 的 ALL BUILDS。

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

【讨论】:

【参考方案8】:

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

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

它会按照你的需要做

【讨论】:

【参考方案9】:

这个答案是给詹金斯的

    转到您的 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()

My post

【讨论】:

迄今为止的最佳答案 这是最快的解决方案。 是的,但是对于这个,不要重新启动 Jenkins,否则当您在重新启动后进行构建时,它似乎不会将 nextbuildnumber 更新为 1。我的从 39 岁开始,所以我不得不重做。 从 Jenkins 2.75 开始工作【参考方案10】:

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

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】:

使用脚本控制台。

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

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

【讨论】:

【参考方案12】:

如果您想清除 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()

【讨论】:

这是唯一有效的。谢谢马林!【参考方案13】:

这是最好的选择。

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

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

【讨论】:

对于想知道如何运行上述代码的任何人,请转到 Jenkins 主页 > 管理 Jenkins > 脚本控制台。那里会有一个文本字段,您可以在其中输入此脚本。【参考方案14】:

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

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)
    
  

【讨论】:

【参考方案15】:

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

在下面运行:

def jobName = "build_name"  
def job = Jenkins.instance.getItem(jobName)  
job.getBuilds().each  it.delete()   
job.save()

【讨论】:

以上是关于如何清除我的 Jenkins/Hudson 构建历史?的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins/Hudson 上传到 Testflight

如何在 Jenkins/Hudson 中以编程方式设置环境变量?

使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)

Jenkins:hudson.plugins.git.GitException:命令“git fetch --tags --progress origin返回状态码143:

如何从 Jenkins/Hudson 上传 APK 到 Play 商店?

仅当特定文件集发生更改时如何触发构建