51

我删除了托管作业的旧詹金斯构建rm

my_job/builds/$ rm -rf [1-9]*

这些旧版本在工作页面中仍然可见。如何使用命令行删除它们?
(每个构建用户界面中没有删除按钮)

4

10 回答 10

55

这是另一种选择:使用 cURL 远程删除构建。(将 URL 的开头替换为您用于通过浏览器访问 Jenkins 的任何内容。)

$ 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 令牌。

编辑:正如 yegeniy 在下面的评论中指出的那样,根据配置,可能必须在上面的 URL 中替换doDeleteAlldoDelete才能使其工作。

于 2014-03-10T14:41:49.897 回答
43

看起来这已添加到 CLI 中,或者至少正在处理中:http: //jenkins.361315.n4.nabble.com/How-to-purge-old-builds-td385290.html

语法是这样的:java -jar jenkins-cli.jar -s http://my.jenkins.host delete-builds myproject '1-7499' --username $user --password $password

于 2012-10-24T15:57:50.927 回答
24
  1. 检查你的家 jenkins 目录:
    • “管理 Jenkins” ==> “配置系统” 在此处输入图像描述
    • 检查字段“主目录”(通常是 /var/lib/jenkins

删除所有詹金斯作业构建的命令

/jenkins_home/jobs> rm -rf */builds/*
  1. 删除后应重新加载配置:

    • “管理 Jenkins” ==> “从磁盘重新加载配置”

在此处输入图像描述

于 2013-06-05T03:48:01.907 回答
13

你可以通过 Groovy Scripts 使用 Hudson API 来做到这一点。访问你的詹金斯安装

http://localhost:38080/script.

例如,使用以下脚本删除所有项目的所有旧版本: 注意:如果使用 Finger Prints ,请小心,您将丢失所有历史记录。

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    System.out.println("Deleting all builds of job "+item.name)
    for(build in item.getBuilds()){
      build.delete()
    }  
  }
  else {
    System.out.println("Skipping job "+item.name+", currently building")
  }
}

或用于清洁所有工作区:

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

Jenkins wiki上有很多例子

于 2014-08-11T18:26:28.910 回答
9

您是否有理由需要手动执行此操作,而不是让 Jenkins 为您删除旧版本?

您可以更改作业配置以根据天数或构建数自动删除旧构建。无需再担心或不必跟踪,詹金斯只是为你做。

于 2012-10-25T17:34:37.183 回答
1

以下脚本清除旧版本的作业。如果您手动删除构建,您应该从磁盘重新加载配置:

import hudson.model.*

for(item in Hudson.instance.items) {
    if (!item.isBuilding()) {
        println("Deleting old builds of job " + item.name)
        for (build in item.getBuilds()) {
            //delete all except the last
            if (build.getNumber() < item.getLastBuild().getNumber()) {
                println "delete " + build
                try {
                    build.delete()
                } catch (Exception e) {
                    println e
                }
            }
        }
    } else {
        println("Skipping job " + item.name + ", currently building")
    }
}
于 2017-02-05T10:20:29.830 回答
0

此脚本将配置所有 Jenkins 作业的构建保留设置。

将值从 30 和 200 更改为您需要的套件,运行脚本,然后重新启动 Jenkins 服务。

#!/bin/bash

cd $HOME
for xml in $(find jobs -name config.xml)
do
    sed -i 's#<daysToKeep>.*#<daysToKeep>30</daysToKeep>#' $xml
    sed -i 's#<numToKeep>.*#<numToKeep>200</numToKeep>#' $xml
done
于 2021-02-05T07:26:07.500 回答
0
def jobName = "MY_JOB_NAME"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().findAll { it.number < 10 }.each { it.delete() }

如果您有 12 个构建,这将清除构建 0-9,您将剩下 12、11、10 个。只需放入脚本控制台

于 2019-07-26T18:14:58.500 回答
0

从 Jenkins Scriptler 控制台运行以下 Groovy 脚本以删除视图下列出的所有作业构建:

import jenkins.model.Jenkins

hudson.model.Hudson.instance.getView('<ViewName>').items.each() {
    println it.fullDisplayName


    def jobname = it.fullDisplayName
    def item = hudson.model.Hudson.instance.getItem(jobname)
    def build = item.getLastBuild()
    if (item.getLastBuild() != null) {
        Jenkins.instance.getItemByFullName(jobname).builds.findAll {
            it.number <= build.getNumber()
        }.each {
            it.delete()
        }

    }
}
于 2016-11-03T05:28:13.243 回答
0

从脚本控制台运行这个,但你需要更改作业名称:

def jobName = "name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
于 2019-04-21T10:16:21.040 回答