Подтвердить что ты не робот

Дженкинс: удалите старые сборки с командной строкой

Я удаляю старые сборки jenkins с rm, где размещено задание:

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

Эти старые сборки все еще видны на странице задания. Как удалить их с помощью командной строки?
(без кнопки удаления в каждом пользовательском интерфейсе сборки)

4b9b3361

Ответ 1

Похоже, что это было добавлено в 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

Ответ 2

Вот еще один вариант: удалять сборки удаленно с помощью cURL. (Замените начало URL тем, что вы используете для доступа к Jenkins с вашим браузером.)

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Вышеописанное удаляет сборку №1 - # 56 для задания myJob.

Если аутентификация включена в экземпляре Jenkins, необходимо указать имя пользователя и токен API следующим образом:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Маркер API должен быть извлечен с страницы /me/configure в Jenkins. Просто нажмите кнопку "Показать API-маркер...", чтобы отобразить как имя пользователя, так и маркер API.

Изменить: как указано yegeniy в комментарии ниже, возможно, вам придется заменить doDeleteAll на doDelete в URL-адресах выше, чтобы выполнить эту работу в зависимости от конфигурации.

Ответ 3

  1. Проверьте ваш домашний каталог Дженкинс:
    • "Управление Jenkins" ==> "Настроить систему" enter image description here
    • Проверьте поле "Домашний каталог" (обычно это /var/lib/jenkins)

Команда для удаления всех сборок заданий jenkins

/jenkins_home/jobs> rm -rf */builds/*
  1. После удаления следует перезагрузить конфиг:

    • "Управление Jenkins" ==> "Перезагрузить конфигурацию с диска"

enter image description here

Ответ 4

Вы можете сделать это с помощью Groovy Scripts, используя Hudson API.. Доступ к установке jenkins

http://localhost:38080/script.

Например, для удаления всех старых сборников всех проектов с помощью 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

Ответ 5

Есть ли причина, по которой вам нужно сделать это вручную, вместо того, чтобы позволить Jenkins удалять старые сборки для вас?

Вы можете изменить конфигурацию своей работы, чтобы автоматически удалять старые сборки, основанные либо на количестве дней, либо на количестве сборок. Больше не беспокоиться об этом или не отслеживать, Дженкинс просто делает это за вас.

Ответ 6

Следующий script очищает старые сборки заданий. Вы должны перезагрузить конфигурацию с диска, если вы удалите сборку вручную:

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")
    }
}

Ответ 7

В консоли Jenkins Scriptler запустите следующий Groovy script, чтобы удалить все сборки заданий, перечисленных в представлении:

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

    }
}

Ответ 8

Из консоли скрипта Запустите это, но вам нужно изменить имя задания:

def jobName = "name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

Ответ 9

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. Просто загляните в консоль скриптов

Ответ 10

Перейдите в панель настроек задания в Jenkins, найдите Source Code Management- > Additional Behaviors- > Нажмите "Добавить", выберите "Очистить" перед проверкой. Дженкинс очистит старые сборки на этой сборке