Изменение номера сборки Jenkins


150

Есть ли способ изменить номер сборки, отправляемый по электронной почте после завершения задания? Проблема в том, что сборки продукта НЕ выполняются Jenkins, поэтому мы хотим иметь возможность получить номер сборки (например, из текстового файла) и обновить номер сборки в Jenkins, чтобы он соответствовал ему. Я попытался установить номер сборки:

set BUILD_NUMBER=45

Но в электронном письме по-прежнему отображается номер сборки, изначально установленный Дженкинсом.

Ответы:


277

Если у вас есть доступ к консоли сценариев (Управление Jenkins -> Консоль сценариев), вы можете сделать это следующим образом:

Jenkins.instance.getItemByFullName("YourJobName").updateNextBuildNumber(45)

8
Я могу убедиться, что это отлично помогает решить проблему. Я вручную скопировал историю сборки между двумя серверами jenkins, и на новом сервере nextBuildNumber оказался неправильным. Выполнение этого позволило мне установить правильный новый nextBuildNumber, перезагрузка конфигурации jenkins не требовалась.
Фил Холленбэк,

5
Если вы используете плагин GitHub, "YourJobName"это "organization/repository/branchname".
Рууд

16
Работает. Значение можно проверить без построения, используя:Jenkins.instance.getItemByFullName("YourJobName").getNextBuildNumber()
Daniel Alder

7
Я могу подтвердить, что это также работает для MultiBranch-Pipelines. «JobName» указано в верхней части страницы ветки: Полное название проекта: PipelineName/BranchNameтак и будетJenkins.instance.getItemByFullName("YourPipelineName/YourBranchName").updateNextBuildNumber(45)
Маркус


37

можно сделать с помощью плагина: https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin

более подробная информация: http://www.alexlea.me/2010/10/howto-set-hudson-next-build-number.html

если вам не нравится плагин:

Если вы хотите изменить номер сборки через файл nextBuildNumber, вам следует «Перезагрузить конфигурацию с диска» на странице «Управление Jenkins».


2
Не нужно использовать плагин.
david.perez 07

1
Спасибо, ты спас мне день.
Юкио Фукудзава

29

В папке рабочей области вакансии, например:

C:\Program Files (x86)\Jenkins\jobs\job_name

есть файл с именем nextBuildNumber.

Установка номера сборки в файле и перезагрузка конфигурации с диска (меню «Управление Jenkins») заставит следующую сборку, которую вы начнете, иметь значение из файла как BUILD_NUMBER.


9
Вы перезагружали конфигурацию с диска (меню «Управление Jenkins») после изменения файла nextBuildNumber?
vezenkov

Неа! Я думал, это произошло автоматически.
hfossli

Это отлично сработало для меня. Перед тем, как это повлияет, необходимо перезагрузить сервер.
Hawkeye64

Необходимость перезагрузки сервера является проблемой, если у вас много пользователей, работающих с конвейером. Лучше избегать такого решения
MorganGeek

9

Если у вас есть имя ветки, включая прямую косую черту (например, с использованием потока git ), вам нужно будет заменить прямую косую черту на ее символ Юникода % 2F в имени ветки.

Вот пример конвейера My-Pipeline-Name и ветки release / my-release-branch-name.

Jenkins.instance.getItemByFullName("My-Pipeline-Name/release%2Fmy-release-branch-name").updateNextBuildNumber(BUILD_NUMBER)

Мне удалось узнать об этом, выполнив следующую команду, в которой будут перечислены различные задания (ветки) для вашего конвейера.

Jenkins.instance.getItem("My-Pipeline-Name").getAllJobs()

Надеюсь, это поможет.


5

Возможно, вам может пригодиться комбинация этих плагинов:


Большое спасибо - мне удалось использовать один из плагинов.
erman8 01

1

Вы можете изменить номер сборки, обновив файл $ {JENKINS_HOME} / jobs / job_name / nextBuildNumber на сервере Jenkins.

Вы также можете установить плагин Next Build Number, чтобы изменить номер сборки с помощью интерфейса командной строки или пользовательского интерфейса.


Обратите внимание, что изменения номера сборки в файле nextBuildNumber самого по себе недостаточно, также необходимо выполнить «Перезагрузить конфигурацию с диска» в меню «Управление Jenkins».
Фальстаф

0

Для многоотраслевых конвейерных проектов сделайте это в консоли скрипта:

def project = Jenkins.instance.getItemByFullName("YourMultibranchPipelineProjectName")    
project.getAllJobs().each{ item ->   
    
    if(item.name == 'jobName'){ // master, develop, feature/......
      
      item.updateNextBuildNumber(#Number);
      item.saveNextBuildNumber();
      
      println('new build: ' + item.getNextBuildNumber())
    }
}

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.