There are a couple different things to notice here:
1. Double quotes in Groovy is string interpolation <http://docs.groovy-lang.org/latest/html/documentation/index.html#_string_interpolation> - Your *sh "cp $SETTINGS_LOCATION ./settings.xml"* is using string interpolation and *$SETTINGS_LOCATION *is being evaluated in the script, but that variable is not present 2. *withCredentials* binds to an environment variable <https://jenkins.io/doc/pipeline/steps/credentials-binding/#withcredentials-bind-credentials-to-variables>. So, *SETTINGS_LOCATION* *should* be available for execution on the allocated nodes There are a few ways I believe you could fix this: 1. Use the *env* global variable (like previously mentioned) to substitute in the value through the Groovy which will retrieve the previously set environment variable by *withCredential* - *sh "cp ${env.SETTINGS_LOCATION} ./settings.xml" * 2. Use single quotes to delay the evaluation of the $*SETTINGS_LOCATION *until the script executes on the node and uses environment variable substituion (I believe this would work, haven't tested it) - *sh 'cp $SETTINGS_LOCATION ./settings.xml'* I believe the second example will not output the value to the logs (which may be important if you do other credentials substitutions, like UsernamePasswordMultiBinding) On Friday, June 10, 2016 at 7:56:42 AM UTC-5, Michael Irwin wrote: > > Versions (current for each)... > - Jenkins - 2.8 > - Credentials Plugin - 2.0.7 > - Credentials Binding Plugin - 1.7 > - Pipeline: Multibranch - 2.6 > (let me know if you need any others) > > - Working in a multibranch project > - Created a "Secret File" credential in the Global scope (just for > testing) with id "settings-file". > - Jenkinsfile has: > > node { > ... > withCredentials([$class: 'FileBinding', credentialsId: 'settings-file', > variable: 'SETTINGS_LOCATION']) { > sh "cp $SETTINGS_LOCATION ./settings.xml" > } > ... > } > > When it runs, get hit with... > > groovy.lang.MissingPropertyException: No such property: SETTINGS_LOCATION for > class: groovy.lang.Binding > > > Oddly, when I open the "Pipeline Syntax" at the project, I'm able to produce > a Groovy snippet for the credential. But, if I open the "Pipeline Syntax" at > the branch level (within the project folder), there are no credentials > available for me to select in the snippet generator. So, it seems that the > folder isn't getting the same visibility to the credential (even though it > was defined globally). > > Any pointers? > > -- > Michael Irwin > > -- You received this message because you are subscribed to the Google Groups "Jenkins Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/d575ffc9-b280-457a-90bc-ab01271fc3d6%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
