Как сбросить номер сборки в jenkins?


90

Я использую Jenkins и Gradle для создания своего java-проекта.

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

Ниже приводится информация о моей сборке Jenkins:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

Я хочу сбросить номер сборки Jenkins, например:

Success > Console Output  #1    03-Jan-2014 12:02:45

Как я могу сбросить номер сборки в Jenkins?

Ответы:


162

Может быть проще сделать из консоли Groovy script. Перейдите по адресу http: // your-jenkins-server / script. В окне сценария введите:

item = Jenkins.instance.getItemByFullName("your-job-name-here")
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)

6
или через java -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
cli

3
Это определенно лучший ответ. Вам даже не понадобится цикл удаления, если вы хотите установить только номер.
Ник

По какой-то причине это выполняет удаление только в последней сборке, однако у меня echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
сработало

Вопрос новичка ... откуда я знаю точное название должности.
Аммар Муджиб

@AmmarMujeeb, зайдите на панель управления Jenkins и вы увидите там название вакансии. Вы также можете зайти в /var/lib/jenkins/jobs/Linux и в названии директории есть точное название работы
rickrizzo

62

От сюда

Учитывая, что ваша работа в Гудзоне называется FooBar,

  • переименуйте FooBar в FooBar-Copy
  • создайте новое задание с именем FooBar, используя опцию «Копировать существующее задание» из FooBar-Copy
  • удалить FooBar-Copy

36
  • Сначала очистите рабочее пространство и избавьтесь от предыдущих сборок.
    • На сервере перейдите в каталог заданий, например. 'var / lib / jenkins / jobs / myJob' удаляет рабочую область и каталоги сборки, а также любые файлы опроса, файлы lastSuccessful, lastStable и т. д. У вас должны быть только config.xml и lastBuildNumber.
    • Выключите jenkins, используя что-то вроде service jenkins stop
    • Отредактируйте файл с именем nextBuildNumber , вставив 1 вместо текущего номера сборки.
    • Запускаем jenkins снова, запускаем service jenkins
    • Войдите в jenkins, займитесь своей работой и нажмите build. Должен начать строить работу №1

1
Это было очень полезно. Благодарю.

23

Если вы хотите установить номер следующей сборки, для этого есть плагин NextBuildNumber. Но в вашем случае это не сработает, потому что номер сборки, который вам нужен, равный 1, меньше вашего текущего номера сборки.

Здесь нужно сначала стереть все предыдущие сборки. Вы можете сделать это, запустив этот простой скрипт Перейти -> Управление Jenkins -> Консоль скрипта

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

Теперь вы можете установить номер следующей сборки на 1 и запустить сборку. Он начнется с 1 . :) Это так просто.

Обновление - у Jenkins теперь есть плагин Purge Job History, чтобы сделать это самым простым способом. Посетите страницу для получения более подробной информации - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin


6

Чтобы в целом сбросить номер сборки на N(где Nне обязательно 1):

  • Удалите все существующие сборки, где buildNumber >= N.
  • Редактировать Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber. Установите номер, который он содержит N.
  • В Jenkins выберите Manage Jenkins -> Reload Configuration from Disk.

Убедитесь, что вы прочитали этот дефект, прежде чем выбирать «Обновить конфигурацию с диска» - issues.jenkins-ci.org/browse/JENKINS-32984
user3181500

6

Продолжая принятый ответ, вот как это сделать для всех проектов сразу:

Jenkins.instance.allItems.each() { 
  item -> item.builds.each() { 
    build -> build.delete()
  }
  item.updateNextBuildNumber(1)
}  

4

Как продолжение отличного ответа @ antweiss, мы можем пойти дальше ...

Нет необходимости удалять полную историю сборки, если вы не хотите, вы можете просто откатить время до предыдущей точки:

resetNumberTarget = 14
item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
//println(item)

item.builds.each() { build ->
  //println(build)
  //println(build.number)

  if(build.number >= resetNumberTarget)
  {
    //println("About to Delete '" + build + "'")    
    build.delete()  
  }
}

item.updateNextBuildNumber(resetNumberTarget)

Если вы хотите фиктивный бежать, чтобы проверить , что он собирается делать, не на самом деле делать это, просто закомментируйте build.delete()и item.updateNextBuildNumber(resetNumberTarget)строки и раскомментировать различные команды печати.


Документация: Подробную информацию об этих объектах найти было трудно, но я идентифицировал следующее:


1

Вы можете использовать либо nexBuildNumberплагин, либо просто изменить nexBuildNumberфайл, чтобы сбросить номер сборки. Ниже приведены шаги, которые вам необходимо выполнить:

  • Зайдите .jenkins/Jobs/<YourJobName>/build/, сделайте резервную копию этой папки (если вам нужно для будущего использования) и удалите папку сборки .

Примечание: после очистки старых сборок вы теряете истории сборок, и они больше не доступны на панели управления Jenkins.

  • Перезагрузите конфигурацию (Jenkins -> Manage Jenkins).
  • Установите для следующей версии сборки значение 1, используя дополнительный модуль Next Build Number или изменив nextBuildNumberфайл в каталоге вашего задания.

0

Я нашел простой способ сделать это.

  1. Вытрите свое рабочее пространство.
  2. Перейдите к каждой сборке, сохраненной на Jenkins, и удалите ее.
  3. Установите номер сборки на 1, затем выполните сборку.

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



-1

Чтобы сбросить номера сборок всех заданий:

Jenkins.instance.getAllItems(AbstractProject.class).each {
    item = Jenkins.instance.getItemByFullName(it.fullName)
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
        build.delete()
    }
    item.updateNextBuildNumber(1)
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.