James Hutchinson
James Hutchinson

Reputation: 881

Escape @ character in jenkins pipeline for git

During our jenkins build we are attempting to push to git. Our password has recently changed, and now includes an @ symbol which gives the following error:

The advice seems to be to encode the password, but I am unable to figure out how to do this within our jenkins pipeline. How do I do this? (I have also tried using the replace method to swap the @ symbol for %40, but that didn't work.)

def GIT_PASSWORD_R = GIT_PASSWORD.replace('@', '%40') 

Escape @ character in git proxy password

def GIT_PASSWORD_R = GIT_PASSWORD.toURL()       
git push -f https://${GIT_USERNAME}:${GIT_PASSWORD_R}@github.company.com/Product/subProd.git ${VERSION}-SNAPSHOT

Upvotes: 1

Views: 2223

Answers (1)

grantler
grantler

Reputation: 226

I have had the same problem. Rather than encoding, another option that is working for me is to use a git credential helper. See this answer: https://stackoverflow.com/a/40038869/9463800

It sets up a git credential helper, does a git operation, and unsets the password in a finally block.

try {
  withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'MyID', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD']]) {
    sh("${git} config credential.username ${env.GIT_USERNAME}")
    sh("${git} config credential.helper '!echo password=\$GIT_PASSWORD; echo'")
    sh("GIT_ASKPASS=true ${git} push origin --tags")
  }
} finally {
    sh("${git} config --unset credential.username")
    sh("${git} config --unset credential.helper")
}

Upvotes: 2

Related Questions