Build Hang or Fail with Git for Windows

Issue

  • My build hangs when doing a git fetch on a windows node
  • My build fails during git fetch on a windows node

Example of hanging build (that eventually timeout)

Started by user admin
Building remotely on win-node in workspace C:\Users\vagrant\win-node\workspace\myFreestyle
Cloning the remote Git repository
Cloning repository https://github.com/user/repo.git
 > git init C:\Users\vagrant\win-node\workspace\myFreestyle # timeout=10
Fetching upstream changes from https://github.com/user/repo.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials user-up
 > git fetch --tags --progress https://github.com/user/repo.git +refs/heads/*:refs/remotes/origin/*
ERROR: Timeout after 10 minutes
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Command "git fetch --tags --progress https://github.com/user/repo.git +refs/heads/*:refs/remotes/origin/*" returned status code -1:
stdout:
stderr:
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1772)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1516)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:67)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:318)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:515)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:152)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:145)
	at hudson.remoting.UserRequest.perform(UserRequest.java:153)
	at hudson.remoting.UserRequest.perform(UserRequest.java:50)
	at hudson.remoting.Request$2.run(Request.java:336)
	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at hudson.remoting.Engine$1$1.run(Engine.java:94)
	at java.lang.Thread.run(Unknown Source)
	at ......remote call to Channel to /127.0.0.1(Native Method)
	at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1537)
	at hudson.remoting.UserResponse.retrieve(UserRequest.java:253)
	at hudson.remoting.Channel.call(Channel.java:822)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.execute(RemoteGitImpl.java:145)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.invoke(RemoteGitImpl.java:131)
	at com.sun.proxy.$Proxy95.execute(Unknown Source)
	at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1054)
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1094)
	at hudson.scm.SCM.checkout(SCM.java:495)
	at hudson.model.AbstractProject.checkout(AbstractProject.java:1278)
	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
	at hudson.model.Run.execute(Run.java:1728)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:98)
	at hudson.model.Executor.run(Executor.java:404)
ERROR: null
Finished: FAILURE

Example of failed build

ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Command "git -c core.askpass=true fetch --tags --progress https://github.com/user/repo.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: 
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Assertion failed!

Program: C:\Program Files\Git-2.8.3-x64\mingw64\libexec\git-core\git-credential-store.exe
File: exec_cmd.c, Line 23

Expression: argv0_path
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/user/repo.git/'

	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1727)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1463)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:63)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:314)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:511)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:152)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:145)
	at hudson.remoting.UserRequest.perform(UserRequest.java:120)
	at hudson.remoting.UserRequest.perform(UserRequest.java:48)
	at hudson.remoting.Request$2.run(Request.java:326)
	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at hudson.remoting.Engine$1$1.run(Engine.java:62)
	at java.lang.Thread.run(Unknown Source)
	at ......remote call to win-node(Native Method)
	at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1416)
	at hudson.remoting.UserResponse.retrieve(UserRequest.java:220)
	at hudson.remoting.Channel.call(Channel.java:781)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.execute(RemoteGitImpl.java:145)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.invoke(RemoteGitImpl.java:131)
	at com.sun.proxy.$Proxy65.execute(Unknown Source)
	at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1057)
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1097)
	at hudson.scm.SCM.checkout(SCM.java:485)
	at hudson.model.AbstractProject.checkout(AbstractProject.java:1276)
	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:607)
	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
	at hudson.model.Run.execute(Run.java:1738)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:98)
	at hudson.model.Executor.run(Executor.java:410)
ERROR: null

Environment

Related Issue

Resolution

If you have installed a recent version of Git for Windows, during the installation there is an option to enable/disabled the Git Credential Manager for Windows.

This option is enabled by default and set the git property credential.helper at a system level. This forces the git client to use the Git Credentials Manager for Windows instead of the local configuration provided by Jenkins. Consequently it makes your build either hang (if running the node as an System Account) or fail (if running the node as a local User).

To workaround that behavior there are 3 different solutions:

  1. Unset the system property via a terminal, run as administrator:

    git config --system --unset credential.helper

    If configuration exists for the account used to run the Jenkins Agent process, you may need to remove the system property for it. By editing the $USER_HOME/.gitconfig file or running the following command:

    git config --global --unset credential.helper

    You may also need to edit the global config file by doing git config --edit --global and remove the line:

    helper = manager
    

    Then pontentially add the line:

    [core]
         askpass =
    

    Note: It is best to reboot the Jenkins Agent machine to ensure no orphan “Windows Git Credential Manager” processes previously started by Jenkins are still running.

  2. Uninstall/Re-install git-for-window and ensure to disable the option “Enable Git Credential Manager” during the installation.

  3. Use the portable version of git-for-windows (no installer)

Have more questions? Submit a request

8 Comments

  • 1
    Avatar
    Dave Parson

    For solution #1, you may need to perform a couple additional steps:

    1. Edit the .gitconfig for the account used to run the Jenkins Slave process, removing the credential.helper setting.
    2. Reboot the Jenkins Slave machine to ensure no orphan "Windows Git Credential Manager" processes previously started by Jenkins are still running.

  • 0
    Avatar
    Allan Burdajewicz

    Thanks Dave. We've updated the article.

  • 2
    Avatar
    Vasan J.s.

    This was a life saver!!

    Thanks a heap!!!

  • 1
    Avatar
    Ralph Jansen

    Disabling the credential manager (after uninstalling) in the installation wizard fixed the issue for me!

  • 1
    Avatar
    Naibedyakar00 Naibedyakar00

    #2 worked for me. Thanks, you are a life saver. 

     

  • 1
    Avatar
    Isuru Madhushankha

    that fix, worked well... thanks a lot.

    Edited by Isuru Madhushankha
  • 0
    Avatar
    Darin Mcgrew

    Thanks. A new team is using GitHub and Windows for the first time. (Before, GitHub was used with Linux and TFS was used with Windows.) They were running into this issue. It's good to have it fixed.

  • 0
    Avatar
    Marius Bob

    uninstalled git and installed it again with "Enable Git Credential Manager" unchecked.

    It worked! You just saved me some hours of working :)

     

    Thanks!

Please sign in to leave a comment.