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

87

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

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

myusuf3
источник
Не могли бы вы подробнее рассказать о «полной путанице»? Возможно, кто-то уже сталкивался с подобной проблемой раньше и может посоветовать вам, как ее исправить.
Роб Хруска,
извините за двусмысленность. фиксированный.
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()
Rjohnston
источник
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() }} 
ort11
источник
9

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

the_mandrill
источник
Извините, я не использовал 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

Еще один простой способ очистить сборки - добавить плагин Discard Old в конце ваших заданий. Установите максимальное количество сборок для сохранения, а затем снова запустите задание:

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

Рутгер Хейсманс
источник
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.

Nitish
источник