Нещодавно я оновив конфігурацію однієї з моїх гудзонових збірок. Історія збірки не синхронізована. Чи є спосіб очистити мою історію збірки?
Будь ласка і дякую
Нещодавно я оновив конфігурацію однієї з моїх гудзонових збірок. Історія збірки не синхронізована. Чи є спосіб очистити мою історію збірки?
Будь ласка і дякую
Відповіді:
Якщо натиснути кнопку Керувати Hudson / Перезавантажити конфігурацію з диска, Hudson перезавантажить усі дані історії збірки.
Якщо дані на диску переплутані, вам потрібно буде перейти до каталогу% HUDSON_HOME% \ jobs \ < ім'я проекту > та відновити каталоги збірки, як вони мали бути. Потім перезавантажте конфігураційні дані.
Якщо ви просто запитуєте, як видалити всю історію збірки, ви можете просто видалити збірки по одному через користувальницький інтерфейс, якщо їх декілька, або перейти до каталогу% HUDSON_HOME% \ jobs \ < ім'я проекту > та видалити всі підкаталоги там - вони відповідають збіркам. Потім перезапустіть службу, щоб зміни набрали чинності.
Використовуйте консоль сценарію (Керування Дженкінсом> Консоль сценарію) та щось подібне до цього сценарію для масового видалення історії побудови завдання 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()
Ця відповідь для Дженкінса
Перейдіть на домашню сторінку Jenkins → Керування Jenkins → Script Console
Запустіть наступний скрипт там. Змінити 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()
Ось ще один варіант: видалити збірки за допомогою 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-адреси, щоб це працювало, залежно від конфігурації або використовуваної версії Дженкінса.
Ви можете тимчасово змінити конфігурацію проекту, щоб зберегти лише останню 1 збірку, перезавантажити конфігурацію (яка повинна видалити старі збірки), а потім знову змінити налаштування конфігурації на бажане значення.
Якщо ви хочете очистити історію збірки 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()
}
Це найкращий варіант.
Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }
Цей код видалить всю історію побудови роботи Jenkins.
Використання 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()
Видалення безпосередньо з файлової системи небезпечно. Ви можете запустити наведений нижче сценарій, щоб видалити всі збірки з усіх завдань (рекурсивно).
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)
}
}
}
Ще один простий спосіб очищення збірок - це додавання плагіна Discard Old у кінці вашої роботи. Встановіть максимальну кількість збірок для збереження, а потім запустіть завдання ще раз:
https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin
Перейдіть до каталогу %HUDSON_HOME%\jobs\<projectname>
видалення builds
та видаліть lastStable, lastSuccessful
посилання та видаліть nextBuildNumber
файл.
Після виконання вищевказаних кроків перейдіть до посилання нижче з інтерфейсу користувача
Jenkins-> Manage Jenkins -> Reload Configuration from Disk
Це зробить, як вам потрібно
Якщо ви використовуєте метод консолі сценарію, спробуйте скористатися наведеним нижче, щоб врахувати, якщо завдання групуються в контейнери папок.
def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)
або
def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)