Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Github-Jenkins Trigger issue with slave

I have a jenkins instance which has a windows slave machine attached. I also have a job running which resides in github and I have the trigger - "Build when a change is pushed to GitHub" set.

as I push a change to github, there is no build triggered on jenkins. I check and see that the payload does get tranferred to jenkins in the "Github hook log" but I get the following error:

 Started on Sep 18, 2014 3:57:06 PM
Using strategy: Default
[poll] Last Built Revision: Revision ce6a183e834a3e31afa0eb83a4418b0619c8642b (origin/master)
 > "C:\Program Files (x86)\Git\cmd\git.exe" ls-remote -h https://xx/xx/xx master # timeout=10
FATAL: hudson.plugins.git.GitException: Error performing command: "C:\Program Files (x86)\Git\cmd\git.exe" ls-remote -h https://xx/xx/xx master
hudson.util.IOException2: hudson.plugins.git.GitException: Error performing command: "C:\Program Files (x86)\Git\cmd\git.exe" ls-remote -h https://xx/xx/xx master
    at hudson.plugins.git.GitSCM.compareRemoteRevisionWith(GitSCM.java:462)
    at hudson.scm.SCM._compareRemoteRevisionWith(SCM.java:357)
    at hudson.scm.SCM.poll(SCM.java:374)
    at hudson.model.AbstractProject._poll(AbstractProject.java:1428)
    at hudson.model.AbstractProject.poll(AbstractProject.java:1331)
    at com.cloudbees.jenkins.GitHubPushTrigger$1.runPolling(GitHubPushTrigger.java:73)
    at com.cloudbees.jenkins.GitHubPushTrigger$1.run(GitHubPushTrigger.java:98)
    at hudson.util.SequentialExecutionQueue$QueueEntry.run(SequentialExecutionQueue.java:118)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: hudson.plugins.git.GitException: Error performing command: "C:\Program Files (x86)\Git\cmd\git.exe" ls-remote -h https://xx/xx/xx master
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1444)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1225)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1138)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1129)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getHeadRev(CliGitAPIImpl.java:2059)
    at hudson.plugins.git.GitSCM.compareRemoteRevisionWithImpl(GitSCM.java:495)
    at hudson.plugins.git.GitSCM.compareRemoteRevisionWith(GitSCM.java:460)
    ... 13 more
Caused by: java.io.IOException: Cannot run program ""C:\Program Files (x86)\Git\cmd\git.exe"": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
    at hudson.Proc$LocalProc.<init>(Proc.java:244)
    at hudson.Proc$LocalProc.<init>(Proc.java:216)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:780)
    at hudson.Launcher$ProcStarter.start(Launcher.java:360)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1433)
    ... 19 more
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
    ... 24 more

Basically complains about not being able to run the command C:\Program Files (x86)\Git\cmd\git.exe" ls-remote -h https://xx/xx/xx master

But as I manually go into my slave machine and run the command, it works fine.

Please note that 1. I have made the adjustment where jenkins slave service logs in as admin so that it has all permissions. 2. My default jenkins server is a linux box and the slave machine is a windows box. Obviously both have different git executable path. So I am wondering if jenkins runs this command on my linux box for some reason.

I do have the project setup to run on the windows slave box only and that works fine as it builds fine(so it is able to find the git executable for the job)

Any pointers?

Also does anyone know how github plugin for jenkins works with slave machines(does it look for git in the slave or does it go to where jenkins resides, as that might be the source, though have no idea what the solution for that weird case would be?)

like image 746
Scooby Avatar asked Sep 18 '14 16:09

Scooby


1 Answers

I tried a work around of adding the "Force polling using workspace" as an "Additional behaviour" in my git SCM definition of the windows job.This solves my issue - not the best way but effective.

If the poll runs on the Linux node (the master) but somehow decides it needs to use the Windows git configuration to poll the master, that might cause the Linux master to attempt to execute git from the Windows git location, instead of the Linux git location(which is what is happening in my project). That would be a bug, and I was surprised at this bug, since there are many installations of Jenkins git which use a wide mix of Linux and Windows slaves. I'm was not aware of such a bug, but since the "Force polling using workspace" resolved the problem for you, it may hint that is an area for more investigation.

like image 156
Scooby Avatar answered Sep 30 '22 08:09

Scooby