2014-09-18 9 views
7

Ich habe eine Jenkins-Instanz, die eine Windows-Slave-Maschine angeschlossen hat. Ich habe auch einen Job, der in github läuft und ich habe den Auslöser - "Build, wenn eine Änderung an GitHub" gesetzt wird.Github-Jenkins Trigger-Problem mit Slave

als ich eine Änderung an Github, gibt es keinen Build ausgelöst auf Jenkins. Ich überprüfen und sehen, dass die Nutzlast zu jenkins in der „Github Haken log“ tranferred bekommt, aber ich erhalte den folgenden Fehler:

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 

Grundsätzlich beschwert sich über den Befehl nicht ausführen zu können C:\Program Files (x86)\Git\cmd\git.exe" ls-remote -h https://xx/xx/xx master

Aber als Ich manuell in meinen Slave-Maschine gehen und den Befehl ausführen, es funktioniert gut.

Bitte beachten Sie, dass 1. Ich habe die Anpassung wo jenkins Slave-Dienst als Administrator angemeldet, so dass es alle Berechtigungen hat. 2. Mein Standard-Jenkins-Server ist eine Linux-Box und die Slave-Maschine ist eine Windows-Box. Offensichtlich haben beide einen anderen git ausführbaren Pfad. Ich frage mich, ob Jenkins diesen Befehl aus irgendeinem Grund auf meiner Linux-Box ausführt.

ich das Projekt Setup nur auf der Windows-Slave-Box laufen und das funktioniert gut, wie es fein baut (so ist es in der Lage, die git ausführbare Datei für den Job zu finden)

Alle Zeiger?

Auch jemand weiß, wie Github-Plugin für Jenkins arbeitet mit Slave-Maschinen (sucht es nach Git im Slave oder geht es zu wo Jenkins wohnt, wie das die Quelle sein könnte, obwohl keine Ahnung, was die Lösung für dieser seltsame Fall wäre?)

Antwort

5

Ich versuchte eine Arbeit um das Hinzufügen der "Abfrage mit Arbeitsbereich als" Zusätzliches Verhalten "in meinem git SCM-Definition des Windows-Job. Dies löst mein Problem - nicht der beste Weg aber effektiv.

Wenn die Abfrage auf dem Linux-Knoten (dem Master) ausgeführt wird, aber irgendwie entscheidet, dass die Windows-Git-Konfiguration den Master abfragen muss, kann der Linux-Master stattdessen versuchen, git vom Windows-Git-Speicherort aus auszuführen des Linux-Git-Standorts (was in meinem Projekt passiert). Das wäre ein Bug, und ich war über diesen Fehler überrascht, da es viele Jenkins-Installationen gibt, die eine breite Mischung von Linux- und Windows-Slaves verwenden. Ich war mir eines solchen Fehlers nicht bewusst, aber da das "Abfrage mit Workspace erzwingen" das Problem für Sie gelöst hat, könnte es ein Hinweis darauf sein, dass dies ein Bereich für weitere Untersuchungen ist.