Як очистити історію побудови Дженкінса / Хадсона?


87

Нещодавно я оновив конфігурацію однієї з моїх гудзонових збірок. Історія збірки не синхронізована. Чи є спосіб очистити мою історію збірки?

Будь ласка і дякую


Чи можете ви детальніше розказати про "повністю переплутаний"? Можливо, хтось раніше стикався з подібною проблемою і може порадити вам, як її виправити.
Роб Груська,

вибачте за двозначність. виправлений.
myusuf3

Тут є нове і трохи більш конкретне запитання: stackoverflow.com/questions/13052390/…
Ерван Легран,

Цей допис може допомогти codeketchup.blogspot.sg/2016/05/…
Наяна Адассурія

Ось найкраща відповідь, яку я знайшов: superuser.com/questions/1418885/…
Асма

Відповіді:


51

Якщо натиснути кнопку Керувати Hudson / Перезавантажити конфігурацію з диска, Hudson перезавантажить усі дані історії збірки.

Якщо дані на диску переплутані, вам потрібно буде перейти до каталогу% HUDSON_HOME% \ jobs \ < ім'я проекту > та відновити каталоги збірки, як вони мали бути. Потім перезавантажте конфігураційні дані.

Якщо ви просто запитуєте, як видалити всю історію збірки, ви можете просто видалити збірки по одному через користувальницький інтерфейс, якщо їх декілька, або перейти до каталогу% HUDSON_HOME% \ jobs \ < ім'я проекту > та видалити всі підкаталоги там - вони відповідають збіркам. Потім перезапустіть службу, щоб зміни набрали чинності.


Я видалив усі файли та папки всередині "/ var / lib / jenkins / jobs / Demo", але коли я переходжу до інтерфейсу Jenkins всередині цієї РОБОТИ, я все ще бачу історію побудови.
Пол

1
Після того, як ви "мавпуєте" зі структурою каталогів, просто перейдіть до "Управління Дженкінсом" і виберіть "Перезавантажити конфігурацію з диска"
DanBaker

1
@paul, після видалення папок там потрібно перезапустити Дженкінса, щоб історія збірки зникла з інтерфейсу користувача. До речі, якщо ми використовуємо Дженкінса, шлях, як правило, знаходиться за адресою / var / jenkins_home / jobs / {назва проекту} / builds /
Яскравий

Я думаю, що це рішення вимагає багато кроків на системній стороні, набагато більш чисте рішення наведено у відповіді від @Nayana Adassuriya
lfn

108

Використовуйте консоль сценарію (Керування Дженкінсом> Консоль сценарію) та щось подібне до цього сценарію для масового видалення історії побудови завдання 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

чудовий фокус, але як щодо скидання лічильника збірки? будь-який сценарій для цього?
Jes Chergui

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

Мій Дженкінс скаржився, що йому заборонено отримувати доступ до екземплярів тощо. Я запускав його з нового конвеєру, який я встановив спеціально для цього видалення, і вставив код вище та змінив назву.
Буде

@Will це пов'язано з плагіном безпеки сценарію, який розміщує завдання конвеєра в надзвичайно обмежувальній пісочниці. Перевірте, чи маєте ви підпис для затвердження в розділі «Керування Дженкінсом»> «Схвалення сценарію в процесі роботи». Іншим варіантом було б використання можливості плагіна Scriptler
rjohnston

76

Ця відповідь для Дженкінса

  1. Перейдіть на домашню сторінку JenkinsКерування JenkinsScript Console

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

  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

Так, але для цього, НЕ перезапустіть Дженкінса, або він, здається, не оновлює номер наступної збірки до 1, коли ви робите збірку після перезапуску. Мій почався в 39, тому мені довелося це переробити.
Вілл

Працює станом на Дженкінс 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.

Редагувати: можливо, доведеться замінити doDeleteAllна doDeleteвказані вище URL-адреси, щоб це працювало, залежно від конфігурації або використовуваної версії Дженкінса.


10

Ось як видалити ВСІ ЗБОРИ ДЛЯ ВСІХ РОБОТ ...... за допомогою сценарію Дженкінса

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

9

Ви можете тимчасово змінити конфігурацію проекту, щоб зберегти лише останню 1 збірку, перезавантажити конфігурацію (яка повинна видалити старі збірки), а потім знову змінити налаштування конфігурації на бажане значення.


Вибачте, не використав Хадсон тепер в протягом декількох років, але побачити це про перезавантаження конфігурації: stackoverflow.com/questions/5216552 / ...
the_mandrill

Як хтось, хто не має дозволів адміністратора на Дженкінса, це був єдиний варіант, який працював у мене.
DrStrangepork

4

Якщо ви хочете очистити історію збірки MultiBranchProject (наприклад, конвеєр), перейдіть на домашню сторінку Jenkins → Керування 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.


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

2

Використання Script Console.

У випадку, якщо завдання згруповані, можна дати йому повне ім'я з косими рисками вперед:

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

Якщо ви використовуєте метод консолі сценарію, спробуйте скористатися наведеним нижче, щоб врахувати, якщо завдання групуються в контейнери папок.

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" містить наступну збірку, яку не використовуватиме Дженкінс.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.