4

I am seeing an error while trying to execute Jenkins job.

git version 1.8.3.1 Jenkins 2.46.2.1-rolling

I tried upgrading git to a higher version but still, it hangs with 1.8.3.1 by following How to install latest version of git on CentOS 6.x/7.x link.Giving permissions to /tmp also did not work

My RHEL7 server is from AWS.

Error Logs while building Jenkins job-

 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url git@git.devops.company.net:user/project_test.git # timeout=10
Fetching upstream changes from git@git.devops.company.net:user/project_test.git
 > git --version # timeout=10
using GIT_SSH to set credentials 
 > git fetch --tags --progress git@git.devops.company.net:user/project_test.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@git.devops.company.net:user/project_test.git
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:806)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1070)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1101)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:109)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:83)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:73)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate(ACL.java:260)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: hudson.plugins.git.GitException: Command "git fetch --tags --progress git@git.devops.company.net:user/project_test.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: fatal: cannot exec '/tmp/ssh2653538317929125933.sh': Permission denied
fatal: unable to fork

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1793)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1519)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:64)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:315)
    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:153)
    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:146)
    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(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    at ......remote call to zz_server_IP(Native Method)
    at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1545)
    at hudson.remoting.UserResponse.retrieve(UserRequest.java:253)
    at hudson.remoting.Channel.call(Channel.java:830)
    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.execute(RemoteGitImpl.java:146)
    at sun.reflect.GeneratedMethodAccessor1953.invoke(Unknown Source)
    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:132)
    at com.sun.proxy.$Proxy140.execute(Unknown Source)
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:804)
    ... 13 more
asur
  • 1,759
  • 7
  • 38
  • 81

1 Answers1

2

The Jenkins git client plugin uses a file in a temporary directory to pass credentials to command line git. If the selected temporary directory is mounted with the noexec option, then command line git is not allowed to execute the script from the temporary directory. The git fetch will fail with a stack trace because command line git did not receive the required credentials.

Git client plugin versions since 2.4.4 (released April 24, 2017) attempt to use a temporary directory within the Jenkins job environment. The system temporary directory is used if a Jenkins job environment is not available.

Alternatives to solve the problem include:

  • Declare a different system temporary directory in the script that starts Jenkins (whether /etc/init.d or Windows or shell script): java -Djava.io.tmpdir=/path/to/tmpdir jenkins.war
  • Declare a different temporary directory for Jenkins ssh agents as a JVM option configured in the "Advanced" section of the agent: -Djava.io.tmpdir=/path/to/tmpdir
  • Declare a different temporary directory of Jenkins JNLP agents as a JVM option on the command line that starts the JNLP agent: java -Djava.io.tmpdir=/path/to/tmpdir agent.jar -jnlpUrl http://jenkins.example.com:8080/computer/my-agent/slave-agent.jnlp -secret MY-SECRET
  • Use the JGit implementation in the Jenkins git client plugin instead of command line git
  • Mount the system temporary file system without the noexec option
Mark Waite
  • 1,351
  • 11
  • 13