Недавно я обновил конфигурацию одной из моих сборок Hudson. История сборки не синхронизирована. Есть ли способ очистить мою историю сборок?
Пожалуйста и спасибо вам
Недавно я обновил конфигурацию одной из моих сборок Hudson. История сборки не синхронизирована. Есть ли способ очистить мою историю сборок?
Пожалуйста и спасибо вам
Ответы:
Если вы нажмете «Manage Hudson / Reload Configuration from Disk», Hudson перезагрузит все данные истории сборки.
Если данные на диске испорчены, вам нужно перейти в каталог% HUDSON_HOME% \ jobs \ <имя проекта > и восстановить каталоги сборки в том виде, в котором они должны быть. Затем перезагрузите данные конфигурации.
Если вы просто спрашиваете, как удалить всю историю сборок, вы можете просто удалить сборки одну за другой через пользовательский интерфейс, если их всего несколько, или перейти в% HUDSON_HOME% \ jobs \ < projectname > и удалить все там подкаталоги - они соответствуют сборкам. После этого перезапустите службу, чтобы изменения вступили в силу.
Используйте консоль сценария (Управление 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()
Это ответ для Дженкинса
Перейдите на главную страницу Jenkins → Управление Jenkins → Консоль сценариев.
Запустите там следующий скрипт. Изменить 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.
Изменить: в приведенных выше URL-адресах, возможно, придется заменить doDeleteAll
на, doDelete
в зависимости от конфигурации или версии используемого Jenkins.
Вы можете временно изменить конфигурацию проекта, чтобы сохранить только последнюю 1 сборку, перезагрузить конфигурацию (которая должна удалить старые сборки), а затем снова изменить настройку конфигурации на желаемое значение.
Если вы хотите очистить историю сборки 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()
}
Это лучший доступный вариант.
Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }
Этот код удалит всю историю сборки Jenkins Job.
С помощью консоли сценариев.
В случае, если задания сгруппированы, можно указать полное имя с косой чертой:
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
Он будет делать то, что вам нужно
Если вы используете метод 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)