2016-01-22 2 views
12

Я переношу работу jenkins-workflow на новый рабочий процесс на основе шаблонов. Поскольку номер сборки используется как часть версии артефактов сборки, рабочий процесс создает, я должен начать строить номер нового рабочего процесса с числом, большим, чем старый рабочий процесс. К сожалению, плагин «Next Build Number» не работает с конвейером рабочих процессов.Установить номер сборки для рабочих процессов Jendkins (конвейер) build

Кто-нибудь знает, как это сделать?

ответ

6

Попробуйте запустить ниже скрипт в Дженкинс консоли Script .. Изменить «Workflow» в свой JobName

def job = Jenkins.instance.getItem("workFlow") 
job.nextBuildNumber = 10 
job.saveNextBuildNumber() 
+2

Этот фрагмент кода не записывает новый номер сборки в 'nextBuildNumber' файла. Из-за этого, если вы (изящно) перезапустите Jenkins, а затем запустите сборку, она закончит использование любого номера сборки, присутствующего в файле 'nextBuildNumber' (а не в указанном выше фрагменте). Использование 'job.saveNextBuildNumber()' вместо 'job.save()' решает эту проблему. – Amit

0

Я также нашел еще один способ сделать это с помощью «Дженкинс-Cli». Она работает для заблокированных объектов, где доступ к консоли сценария не доступен (Cloudbees Enterprise Jenkins)

java -jar jenkins-cli.jar -s https://instanceURL/ \ 
      set-next-build-number workflow-name 33 
12

Или вы могли бы добавить фрагмент кода, как это ваш Pipeline/Workflow работы DSL скрипт (он же Jenkinsfile):

offset = 5 
currentBuild.displayName = "#" + (currentBuild.number + offset) 
+0

Это именно то, что мне нужно! –

7

К сожалению, перечисленные выше методы не работали при использовании папок. Я прибег к следующему в консоли сценария Дженкинс:

job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class) 
job.nextBuildNumber = 92 
job.save() 
+1

Если вы используете 'job.saveNextBuildNumber()' для строки 3, это сработало для моего многоотводного конвейера. –

+0

Чтобы найти свое имя задания из многоотводного конвейера, запустите это: 'def jobs = Jenkins.getInstance(). GetAllItems(); Println (работы) ' И затем, как описано выше @DavidV: определение функции задания = Jenkins.instance.getItemByFullName ("YourTeam/your_project/особенности% 2Fbranchname"); job.nextBuildNumber = 301; job.saveNextBuildNumber(); ' – kivagant

2

Несколько заметок:

  • Дженкинс Работа и папки не сериализации. Необходимость использования @NonCPS
  • Отключить Groovy песочницы, а Глобал как Jenkins.instance не доступны в противном случае
  • Jenkins.instance.getItem() будет не очень хорошо работать с папками. Используйте Jenkins.instance.getItemByFullName против env.JOB_NAME
  • Установки job.nextBuildNumber вступит в силу последующей сборку, так что идти вперед и начать следующий
  • Убедитесь, что вы вернетесь из вашего трубопровода так инициирующая сборки не продолжается с плохой сборкой числом

код:

@NonCPS 
def updateBuildNumber(build_number) { 
    def job = Jenkins.instance.getItemByFullName(env.JOB_NAME, Job.class) 
    job.nextBuildNumber = build_number 
    job.saveNextBuildNumber() 
    build env.JOB_NAME 
    return true 
}