web-dev-qa-db-fra.com

Existe-t-il un moyen de transmettre le numéro actuel de BUILD NUMBER au démon Gradle à partir de la construction Jenkins?

J'accède au numéro de build Jenkins dans le script Gradle en appelant: 

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

Cela fonctionne bien la première fois que je lance la construction. La deuxième fois que la génération est exécutée, le nombre n'est pas incrémenté, il reste identique à celui de la précédente exécution . Je ne me souviens pas d'avoir le même problème avec les versions antérieures.

Ma solution actuelle consiste à passer le commutateur --no-daemon à Gradle. Cependant, de cette façon, je ne peux pas bénéficier de la fonctionnalité de démon. Existe-t-il un moyen d'utiliser les démons tout en obtenant le bon numéro de construction dans la version Gradle?

9
Dan

Utilisez-vous Java 9? Avec Java 9, Gradle ne peut plus modifier l'environnement du démon - vous ne pouvez donc pas transmettre de propriétés à l'aide de variables d'environnement . L'avertissement suivant doit apparaître dans vos journaux:

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

Vous pouvez passer le 'BUILD_NUMBER' en tant que propriété système (-DbuildNumber=$BUILD_NUMBER) ou propriété du projet Gradle (-PbuildNumber=$BUILD_NUMBER) à l'aide de la ligne de commande de Gradle.

4
wolfs42

Il semble que cela ait été discuté et résolu dans les forums Gradle , en lisant l’environnement System dans un bloc spécial:

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

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

Je construis normalement un magasin clé-valeur avec un horodatage utilisant redis pour stocker les numéros de build. De cette façon, je peux isoler et récupérer, et envoyer des données entre chaque client.

0
Remario