Reputation: 11183
I am accessing Jenkins build number in Gradle script by calling:
def buildNumber = System..getenv('BUILD_NUMBER')
It works fine the first time I run the build. The second time the build is run, the number is not incremented, it stays the same from previous build run. I am using 4.4.1 version of Gradle. I don't remember having the same problem with earlier versions.
My current workaround is to pass --no-daemon switch to Gradle. However, that way I am not able to benefit from daemon feature. Is there a way to use daemons ans still get the correct build number in Gradle build?
Upvotes: 12
Views: 8868
Reputation: 3863
I normally build a key-value store with a timestamp using redis to store build numbers. This way i can isolate and retrieve , and send data back forth between any client.
Upvotes: 0
Reputation: 816
Are you using Java 9? With Java 9 it is not possible for Gradle anymore to modify the environment of the Daemon - so you cannot pass properties by using environment variables. You should see the following warning in your logs:
Warning: Unable able to set daemon's environment variables to match the client because:
Java 9 does not support modifying environment variables.
You can pass the 'BUILD_NUMBER'
as a system property (-DbuildNumber=$BUILD_NUMBER
) or a Gradle project property (-PbuildNumber=$BUILD_NUMBER
) from by the command line of Gradle instead.
Upvotes: 10
Reputation: 10685
It seems this was discussed and solved in the gradle forums, by reading the System env in a special block:
class Globals {
String buildNr = System.getenv( 'BUILD_NUMBER' ).toString()
}
ext {
globals = new Globals()
}
// reference it like:
println "value of BUILD_NUMBER = " + globals.buildNr
Upvotes: 2