Jenkins BUILD_NUMBER limit — максимальное количество сборок

Хотите узнать, какое максимальное число может получить номер сборки Jenkins (BUILD_NUMBER)? Я пытался найти в Интернете, но не смог найти эту информацию.

Является ли он бесконечным или имеет какой-то предел (будучи INT или INT64 или каким-либо другим типом)?

PS: я НЕ ищу, как сбросить его обратно на #1 или #N с помощью следующего плагина или установить для него заданное имя (используя Set build name плагин). https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin

Чтобы найти его предел, используйте плагин Next Build Number — когда я установил сборку на «65 535», она все еще работала для успешного получения 65536, и я продолжал увеличивать это значение до 999999999 (9 раз), и это все еще работало, т.е. была запущена следующая сборка, которая была 1000000000, и собрала действительный номер сборки Jenkins для нескольких других запусков/сборок.

Когда я попытался установить следующий номер сборки как: 9999999999 (10 раз), плагин Jenkins выдал сообщение об ошибке (которое показывает, что следующий номер сборки, который я установил, не был целым числом, т.е. не в диапазоне):

A problem occurred while processing the request. Please check our bug tracker to see if a similar problem has already been reported. If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. If you think this is a new issue, please file a new issue. When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. The users list might be also useful in understanding what has happened.

Stack trace

javax.servlet.ServletException: Build number must be an integer
    at org.jvnet.hudson.plugins.nextbuildnumber.NextBuildNumberAction.doSubmit(NextBuildNumberAction.java:87)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

person AKS    schedule 28.11.2016    source источник
comment
Довольно приличная ставка, что это 32-битное целое число, не так ли? Наибольшее значение 4 294 967 296   -  person jonrsharpe    schedule 28.11.2016
comment
@jonrsharpe не принял это значение и вырвало. По моему мнению, это значение без знака для int, т.е. оно будет принимать 2147483647 в качестве последнего значения.   -  person AKS    schedule 28.11.2016
comment
Тогда вы все же ответили на свой вопрос. Что ты спрашиваешь?   -  person jonrsharpe    schedule 28.11.2016
comment
Я думаю, что не должен был :) или я не помнил лимиты INT. Странная вещь, которую я нашел, хотя. Если я даю ОТРИЦАТЕЛЬНОЕ число при установке номера сборки, плагин не выдает ошибку, это означает, что BUILD_NUMBER НЕ НЕ ПОДЗНАЧЕН, но тогда он не генерирует номер сборки в -22 -21 -20 ... либо.   -  person AKS    schedule 28.11.2016
comment
Почему вы так думаете, учитывая, что вы буквально только что выяснили, что это было знаковое 32-битное целое число?   -  person jonrsharpe    schedule 28.11.2016


Ответы (1)


Found Jenkins BUILD_NUMBER — это тип данных SIGNED Integer, а ограничения со знаком INT:

int 2 or 4 bytes    -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647

Таким образом, последнее значение, которое может быть задано или построено для задания Jenkins: 2147483647 (здесь 4 байта). Установка значения выше этого числа вызовет ожидаемую ошибку предела INT.

Также заметил следующую проблему с плагином SET NEXT BUILD NUMBER:

  1. Если я установлю следующий номер сборки между -2147483648 или 2147483647 (положительный), этот плагин работает в обоих случаях, т.е. дает отрицательное или положительное число и устанавливает его без ошибок. НО, если вы уже достигли сборки № 2147483647 (в истории заданий), то даже установка № сборки на 1 НЕ приведет к созданию следующей сборки как 1 или 2 . или 3 и так далее.

  2. Поскольку BUILD_NUMBER имеет ПОДПИСАНИЕ (от -N до +N в приведенном выше диапазоне) и, например: установка -22 работает для установки следующей сборки # с помощью плагина, это не дало мне build# -21 или build# 21 в моем случае.

Что происходит, так это то, что, предоставляя отрицательное/меньшее значение, чем последний/предыдущий номер сборки, этот плагин принимает это значение в пределах ограничения, НО на самом деле ничего не делает/дает мне ожидаемый номер сборки. Когда я нажимаю Создать сейчас/каждый раз, когда вы нажимаете "Создать сейчас" и если вы нажимаете "Установить номер следующей сборки", чтобы проверить значение, я заметил, что < strong>число, указанное в поле, было автоуменьшается в зависимости от того, сколько раз я нажимал «Создать сейчас» (это происходит только тогда, когда вы достигли предела), а отрицательное/меньшее значение никакого эффекта для следующего номера сборки (согласно документации плагина).

Я проверил это, создав новый test_job (отбросил старые сборки, сохранив только 1 сборку):

  1. нажал на Build Now, получил Build# 1.
  2. Установите номер следующей сборки на 100.
  3. Нажал «Сборка сейчас», получил сборку № 100, нажал «Сборка сейчас», получил сборку № 101.
  4. На этот раз установите номер сборки на 11.
  5. Нажал «Создать сейчас», но вместо того, чтобы дать мне сборку № 12, Дженкинс дал мне сборку № 102 (PS: это предполагаемое поведение этого плагина в соответствии с его документацией, поскольку установка следующего номера сборки на меньшее число N ничего не сделает).
person AKS    schedule 28.11.2016