def myText = ''' properties: - param: booleanParam args: name: ENABLE_AAT defaultValue: true description: "Should we run AATs" - param: stringParam args: name: NEXT_BUILD defaultValue: '${env.BUILD_NUMBER.toInteger() + 1}' description: 'Choose the next build number' ''' node('master') { stage('yaml') { def myYaml = readYaml text: myText def myProps = readMyProps myYaml.properties properties([ parameters(myProps) ]) } } @NonCPS def readMyProps(properties) { properties.collect { parameter -> this.invokeMethod parameter.param, parameter.args.collectEntries { name, value -> [ name, value instanceof String ? interp(value) : value ] } } } @NonCPS def interp(value) { new groovy.text.GStringTemplateEngine() .createTemplate(value) .make([env:env]) .toString() }