Есть ли способ передать текущий номер сборки для Gradle deamon из Jenkins build?

Я обращаюсь к номеру сборки Дженкинса в скрипте Gradle, позвонив:

def buildNumber = System..getenv('BUILD_NUMBER')

он отлично работает при первом запуске сборки. При втором запуске сборки число не увеличивается, оно остается таким же, как и при предыдущем запуске сборки. Я использую 4.4.1 версию Gradle. Я не помню такая же проблема с более ранними версиями.

мой текущий обходной путь-передать -- no-daemon переключатель в Gradle. Однако, таким образом, я не могу извлечь выгоду из daemon особенность. Есть ли способ использовать демонов и получить правильный номер сборки в Gradle build?

3 ответов


вы используете Java 9? С Java 9 Gradle больше не может изменять среду демона - поэтому вы не можете передавать свойства с помощью переменных среды. Вы должны увидеть следующее предупреждение в журналах:

Warning: Unable able to set daemon's environment variables to match the client because: 
Java 9 does not support modifying environment variables.

вы можете пройти 'BUILD_NUMBER' как системное свойство (-DbuildNumber=$BUILD_NUMBER) или свойство проекта Gradle (-PbuildNumber=$BUILD_NUMBER) из командной строки Gradle вместо этого.


Кажется, это обсуждалось и решалось на форумах gradle, прочитав систему env в специальном блоке:

class Globals {
  String buildNr =  System.getenv( 'BUILD_NUMBER' ).toString()
}
ext {
   globals = new Globals()
}

// reference it like:
println "value of BUILD_NUMBER = " + globals.buildNr

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