JoshOfAllTrades
JoshOfAllTrades

Reputation: 532

Attempting to use scm:tag in a Jenkins job for a Git repository that requires a username/password

I am attempting to configure a Jenkins/Maven/Git release build job as described by Axel Fontaine (http://axelfontaine.com/blog/final-nail.html). I made the additions to my POM as he described, and configured my Jenkins job accordingly.

In the Source Code Management section I entered the Repository URL for our internally hosted instance of Stash (which requires a username and password - SSH keys are not an option): https://stash.mycompany.com/scm/st_proj/my_repo.git

I provided the username/password credentials.

As in the blog post I created a Maven pre-step that has the goals versions:set -DnewVersion=$BUILD_NUMBER.

And also as in the blog post I set the goals for the build to deploy scm:tag.

When the job executes I get the following error.

[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR]
(gnome-ssh-askpass:32706):  Gtk-WARNING **: cannot open display:
error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass'
fatal: could not read Username for 'https://stash.mycompany.com': No such device or address

I realize this is because the Git command is attempting to prompt me for a username and password, but since this is run as a Jenkins' job there is no display for it to send the prompt to.

Why am I being prompted for a username and password when I have them set earlier in the job configuration? I know they are correct because they were required to clone the repository.

Upvotes: 6

Views: 4851

Answers (3)

Ludovic Ronsin
Ludovic Ronsin

Reputation: 812

You need to configure your git credentials in maven too.

First declare a server in maven settings.xml under <settings> <servers>

<server>
    <id>gitserver</id>
    <username>git-user</username>
    <password>**************</password>
</server>

then reference your server in your project pom.xml properties

<project.scm.id>gitserver</project.scm.id>

See http://maven.apache.org/maven-release/maven-release-plugin/faq.html#credentials

Upvotes: 0

JoshOfAllTrades
JoshOfAllTrades

Reputation: 532

Another (and much better) solution:

In Jenkins instead of using the scm:tag goal, use the Git Publisher post-build action. Here you can set and push a tag to the repository and the plugin uses the credentials stored in Jenkins!

Screen capture of Git Publisher section

Upvotes: 5

JoshOfAllTrades
JoshOfAllTrades

Reputation: 532

After pounding on this for a while I've found a workaround - if not a solution. (Solutions are still welcome)

  1. Log into the Jenkins build slave (as the user that runs the build jobs)
  2. Set the credential cache git config --global credential.helper 'cache --timeout 600'

Now when the credentials are used to clone the repository they are cached by Git for the subsequent push command.

Upvotes: 3

Related Questions