2

i am trying to use jenkins scripted pipeline to invoke config file provider plugin along with fetching credentials from jenkins for the username and password, but the below doesn't seem to work.

 node { def mvnHome def mvnSettings stage('Prepare') { mvnHome = tool 'maven-3.5.4' } stage('Checkout') { checkout scm } stage('Deploy'){ def usernameLocal, passwordLocal, usr, psw withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'xyz', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME']]) { usernameLocal = env.USERNAME passwordLocal = env.PASSWORD } configFileProvider( [configFile(fileId: '*********', variable: 'MAVEN_SETTINGS', replaceTokens: true)]) { usr="${usernameLocal}" psw="${passwordLocal}" sh "echo $usr" sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy -Dserver.username="${usernameLocal}" -Dserver.password="${passwordLocal}"" } } }

where server.username and server.password are defined as properties under settings.xml server section for username and password.

Looks like i found out the issue and its nothing to do with withCredentials used here rather to do with the config file provider plugin. So i am able to print the credentials username correctly but somehow the config file provider is unable to substitute the variable value in the settings.xml.

so i don't get any error anymore, its just that the deployment doesn't go through with 401 unauthorized since the below in my settings.xml never gets the correct values :-

 <server> <id>snapshot</id> <username>${server.username}</username> <password>${server.password}</password> </server>

Could you please advise how to resolve this?

7
  • Perhaps add to this with the error you are receiving Commented Nov 22, 2018 at 4:28
  • I have provided all details that might serve useful, including the error message.The short of it is that i want to invoke credentials from Jenkins to retrieve username and password (for some reason) in the scripted pipeline and pass them on to the config file provider mvn command as parameters. Commented Nov 23, 2018 at 15:03
  • Ok the previous issue is resolved and i have updated the post now. Is that something you could have a look at now and help me figure out the issue? Commented Nov 23, 2018 at 20:11
  • Thanks Mark for the prompt response. Yes the password uses special chars. But how do i know if the config file provider sh script is even substituting the settings.xml username and password with the values i am passing in that script.? Commented Nov 23, 2018 at 20:14
  • Try sh "echo '${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy -Dserver.username="${usernameLocal}" -Dserver.password="${passwordLocal}"" Commented Nov 23, 2018 at 20:16

2 Answers 2

3

The variables created by withCredentials are Groovy variables not environment variables. Try the following:

stage('Deploy'){ withCredentials([usernamePassword(credentialsId:'xyz', passwordVariable: 'Password', usernameVariable: 'Username')]) { configFileProvider([configFile(fileId: 'abcde', variable:'MAVEN_SETTINGS')]) { sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy -Dserver.username=${Username} -Dserver.password=${Password}" } } } 
Sign up to request clarification or add additional context in comments.

1 Comment

That doesn’t work either. And the most weird error is :- unexpected “ in the sh line which implies you can only use ‘ ' ( single quotes) while dealing with withCredentials.
0

Ok I figured out the solution, declare the configFileProvider entire section under the block of withCredentials and pass:

-Dserver.username='${usernameLocal}' -Dserver.password='${passwordLocal}' 

(Please note single quotes). This way the values also get substituted and are outputted in the logs as masked.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.