Как узнать номер сборки для текущего проекта в Jenkins? - PullRequest
3 голосов
/ 19 августа 2011

Мне известна переменная окружения BUILD_NUMBER; однако, если я не ошибаюсь, это глобальная переменная, которая, похоже, используется всеми проектами. Это проблема, поскольку, если у меня два агента, выполняющих задания, один сценарий может попытаться использовать номер сборки текущего проекта после того, как другой сценарий обновил его для другого проекта.

Вот пример сценария:

  • Задание J 1 запускается, выполняя некоторый сценарий S . BUILD_NUMBER в настоящее время, скажем, 500.
  • Кто-то вручную запускает задание J 2 , которое теперь устанавливает BUILD_NUMBER на что-то совершенно другое, скажем, 750.
  • Сценарий S , который все еще работает, теперь достигает точки, где он фактически использует BUILD_NUMBER, теперь установлен на 750 (невозможное значение для задания J 1 , что только до 500).

Прав ли я в этом понимании? Если да, то как мне решить эту проблему?

Ответы [ 3 ]

10 голосов
/ 19 августа 2011

BUILD_NUMBER не является глобальным для системы. Это локально для каждой работы. В вашем примере J1 и J2 будут иметь разные значения BUILD_NUMBER (J1 = 500, J2-750), и они будут оставаться постоянными - в рамках задания - на протяжении всего задания.

5 голосов
/ 17 апреля 2014

Вы можете получить последний (завершенный или выполняемый в настоящий момент) номер сборки с:
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/buildNumber
или из самой работы вы можете использовать переменную окружения:
${BUILD_NUMBER}

Вы также можете использовать все остальные постоянные ссылки, например:
/lastStableBuild/
/lastSuccessfulBuild/
/lastFailedBuild/
и т. д.

Если вы не настраиваете свой номер сборки с помощью плагина, такого как Номер следующей сборки , ваш номер сборки следующий всегда будет с шагом последний номер сборки.

Номера сборок на задание . Они не являются глобальными переменными среды.
Каждый раз, когда выполняется любое задание, оно копирует / наследует существующих переменных среды в новый сеанс . Затем Дженкинс / Хадсон добавляет все параметры задания и дополнительные переменные (включая ${BUILD_NUMBER}) к этому новому сеансу. Они доступны как переменные среды только на время этого сеанса (т. Е. На время выполнения задания). По завершении задания этот сеанс уничтожается (вместе со всеми дополнительными переменными, сгенерированными для сеанса).

Вы не можете получить доступ к переменным среды одного запуска задания / сеанса из другого запуска задания / сеанса. Однако вы можете получить доступ к /lastBuild/buildNumber другой работы с помощью предоставленного мной метода URL. Вы также можете получить доступ к /lastBuild/buildTimestamp таким же образом.

Для доступа к параметрам задания другого задания вы можете использовать:
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/api/json
или
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/api/xml
но вам нужно будет проанализировать вывод для того, что вам нужно.

0 голосов
/ 19 августа 2011

Используйте плагин Get Next Build Number.

https://wiki.jenkins -ci.org / display / JENKINS / Next + Build + Number + Plugin

...