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

  • Structure in git with multiple websites
  • commit one at a time in git
  • Using git subtree merging, while also merging in all branches of all merged subtrees
  • Git: Set up a fetch-only remote?
  • Creating SSH keys for Gerrit and Hudson
  • Restore remote Git branch
  • 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.

  • Pulling changes of another branch and replay my local changes over them
  • List all the files that ever existed in a Git repository
  • Git Variables in Jenkins Workflow plugin
  • Eventmachine start_tcp_server no acceptor - port is in use or requires root privileges (RuntimeError)
  • Jenkins pull request plugin triggers builds from all branches in a repo and not a specific branch
  • Setting Up a Git Prototype
  • 3 Solutions collect form web for “Attempting to use scm:tag in a Jenkins job for a Git repository that requires a username/password”

    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

    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.

    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

    Git Baby is a git and github fan, let's start git clone.