Ok, so having got my script working, I decided to move part of it into a shared library as per the section marked
Define more structured DSL
here
But I'm getting what to me seems like very odd behaviour with the variables.
My primary jenkins code (on the server in the job configuration, not a jenkinsfile in this case), looks like this (after cutting it down to the minimum to test this phenomemon)
@Library('mylibrary')
echo buildparam_project.getClass().name
echo buildparam_project
def check = buildparam_project
utils = new gforce.utigforce.patchreader()
WpfCheckoutAndBuild {
project = "${check} Project is ${buildparam_project}"
}
buildparam_project is a build parameter
meanwhile, the file vars/WpfCheckoutAndBuild.groovy looks like this
def call(body) {
// evaluate the body block, and collect configuration into the object
def buildparam = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = buildparam
body()
echo buildparam.project
}
The output I see, is
[Pipeline] echo java.lang.String
[Pipeline] echo MyProject
[Pipeline] echo MyProject Project is null
[Pipeline] End of Pipeline Finished: SUCCESS
So buildparam_project can't be passed directly, I have to assign it to another variable first?
I assume this is something going on under the hood that I don't know about, Groovy can be very odd and Groovy under CPS considerably more so.
Could somebody explain it, and ideally give me a solution that doesn't require me to create copies of every build parameter (I'll do it if I have to, but it's messy)?