Как очистить историю сборки Jenkins / Hudson?


87

Недавно я обновил конфигурацию одной из моих сборок Hudson. История сборки не синхронизирована. Есть ли способ очистить мою историю сборок?

Пожалуйста и спасибо вам


Не могли бы вы подробнее рассказать о «полной путанице»? Возможно, кто-то уже сталкивался с подобной проблемой раньше и может посоветовать вам, как ее исправить.
Роб Хруска,

извините за двусмысленность. фиксированный.
myusuf3 04

Здесь есть более новый и немного более конкретный вопрос: stackoverflow.com/questions/13052390/…
Эрван Легран

Этот пост может помочь codeketchup.blogspot.sg/2016/05/…
Наяна Адассурия

Вот лучший ответ, который я нашел: superuser.com/questions/1418885/…
Асма Зубаир

Ответы:


51

Если вы нажмете «Manage Hudson / Reload Configuration from Disk», Hudson перезагрузит все данные истории сборки.

Если данные на диске испорчены, вам нужно перейти в каталог% HUDSON_HOME% \ jobs \ <имя проекта > и восстановить каталоги сборки в том виде, в котором они должны быть. Затем перезагрузите данные конфигурации.

Если вы просто спрашиваете, как удалить всю историю сборок, вы можете просто удалить сборки одну за другой через пользовательский интерфейс, если их всего несколько, или перейти в% HUDSON_HOME% \ jobs \ < projectname > и удалить все там подкаталоги - они соответствуют сборкам. После этого перезапустите службу, чтобы изменения вступили в силу.


Я удалил все файлы и папки внутри «/ var / lib / jenkins / jobs / Demo», но когда я перехожу в пользовательский интерфейс Jenkins внутри этого ЗАДАНИЯ, я все еще вижу историю сборок.
Пол

1
После того, как вы «обезьяны» со структурой каталогов, просто перейдите в «Управление Jenkins» и выберите «Перезагрузить конфигурацию с диска»
DanBaker

1
@paul, после удаления там папок необходимо перезапустить Jenkins, чтобы история сборки исчезла из пользовательского интерфейса. Кстати, если мы используем Jenkins, путь обычно находится в / var / jenkins_home / jobs / {имя проекта} / builds /
Брайт,

Я думаю, что это решение требует много шагов на стороне системы, гораздо более чистое решение предоставлено в ответе от @Nayana Adassuriya
lfn

109

Используйте консоль сценария (Управление 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()

5
Большой!! определенно лучший подход! :)
hek2mgl 07

отличный трюк, а как насчет сброса счетчика сборки? какой-нибудь скрипт для этого?
Jes Chergui

1
@JesChergui Я обновился, чтобы показать сброс номера сборки. Консоль сценариев позволяет вам контролировать все, что угодно , см. Javadoc.jenkins-ci.org (AbstractProject - хорошее место для начала игры с заданиями)
rjohnston

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

@Will это связано с плагином безопасности сценария, который помещает задания конвейера в супер ограничительную песочницу. Посмотрите, есть ли у вас подпись для утверждения в разделе «Управление Jenkins»> «Утверждение сценария в процессе». Другой вариант - использовать возможность плагина Scriptler запускать сценарии администратора в задании: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

Это ответ для Дженкинса

  1. Перейдите на главную страницу JenkinsУправление JenkinsКонсоль сценариев.

    Введите описание изображения здесь

  2. Запустите там следующий скрипт. Изменить 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()

Мой пост


4
Лучший ответ на данный момент
Дмитрий Зайцев

1
Это самое быстрое решение.
davegallant

Да, но для этого НЕ перезапускайте Jenkins, иначе он, похоже, не обновит nextbuildnumber до 1, когда вы выполняете сборку после перезапуска. Моя началась с 39, поэтому мне пришлось переделать это.
Will

Работает с Jenkins 2.75
eallү

22

Другой вариант: удалить сборки с помощью cURL.

$ 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.

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


10

Вот как удалить ВСЕ СБОРКИ ДЛЯ ВСЕХ РАБОТ ... с помощью сценария Jenkins.

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

9

Вы можете временно изменить конфигурацию проекта, чтобы сохранить только последнюю 1 сборку, перезагрузить конфигурацию (которая должна удалить старые сборки), а затем снова изменить настройку конфигурации на желаемое значение.


Извините, я не использовал Hudson уже пару лет, но посмотрите это о перезагрузке конфигурации: stackoverflow.com/questions/5216552/…
the_mandrill

Как человек, у которого нет прав администратора для Jenkins, это был единственный вариант, который сработал для меня.
DrStrangepork

4

Если вы хотите очистить историю сборки MultiBranchProject (например, конвейер), перейдите на домашнюю страницу Jenkins → Manage Jenkins → Script Console и запустите следующий сценарий:

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

4

Это лучший доступный вариант.

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

Этот код удалит всю историю сборки Jenkins Job.


2
Для тех, кому интересно, как запустить приведенный выше код, перейдите на главную страницу Jenkins> Управление Jenkins> Консоль сценариев. Там будет текстовое поле, в которое вы можете ввести этот скрипт.
Pharaoh Tools

2

С помощью консоли сценариев.

В случае, если задания сгруппированы, можно указать полное имя с косой чертой:

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

2

Удаление напрямую из файловой системы небезопасно. Вы можете запустить приведенный ниже сценарий, чтобы удалить все сборки из всех заданий (рекурсивно).

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


1

Перейдите в %HUDSON_HOME%\jobs\<projectname>каталог удаления buildsи удалите lastStable, lastSuccessfulссылки, а затем удалитеnextBuildNumber файл.

После выполнения вышеуказанных шагов перейдите по ссылке ниже из пользовательского интерфейса
Jenkins-> Manage Jenkins -> Reload Configuration from Disk

Он будет делать то, что вам нужно


1

Если вы используете метод Script Console, попробуйте использовать следующее, чтобы учесть, группируются ли задания в контейнеры папок.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

или

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)

0

Перейдите к: %JENKINS_HOME%\jobs\jobName

Откройте файл "nextBuildNumber" и измените номер. После этого перезагрузите конфигурацию Jenkins. Примечание. Файл "nextBuildNumber" содержит номер следующей сборки, который будет использоваться Jenkins.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.