Ich versuche, ein Git-Projekt in Jenkins mit dem Git-Plugin zu konfigurieren. Auf der Projektkonfigurationsseite gebe ich die Repository-URL in die Git-Konfiguration ein. Hierbei handelt es sich um eine https-URL ( https://git.mycompany.com/git/MyProject.git ). Beim Erstellen des Projekts bekomme ich jedoch die folgende Fehlermeldung:
Started by user Hudson Administrator
[EnvInject] - Loading node environment variables.
Building in workspace /home/hudson/.hudson/jobs/MyProject/workspace
Checkout:workspace / /home/hudson/.hudson/jobs/MyProject/workspace - [email protected]
Using strategy: Default
Cloning the remote Git repository
Cloning repository https://git.mycompany.com/git/MyProject.git
git --version
git version 1.8.2.1
ERROR: Error cloning remote repo 'Origin' : Could not clone https://git.mycompany.com/git/MyProject.git
hudson.plugins.git.GitException: Could not clone https://git.mycompany.com/git/MyProject.git
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.Java:286)
at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.clone(AbstractGitAPIImpl.Java:59)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.clone(CliGitAPIImpl.Java:47)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.Java:1012)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.Java:948)
at hudson.FilePath.act(FilePath.Java:912)
at hudson.FilePath.act(FilePath.Java:885)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.Java:948)
at hudson.plugins.git.GitSCM.checkout(GitSCM.Java:1114)
at hudson.model.AbstractProject.checkout(AbstractProject.Java:1411)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.Java:652)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.Java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.Java:557)
at hudson.model.Run.execute(Run.Java:1665)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.Java:507)
at hudson.model.ResourceController.execute(ResourceController.Java:88)
at hudson.model.Executor.run(Executor.Java:230)
Caused by: hudson.plugins.git.GitException: Failed to connect to https://git.mycompany.com/git/MyProject.git
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getURLWithCrendentials(CliGitAPIImpl.Java:1374)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getURLWithCrendentials(CliGitAPIImpl.Java:1326)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.Java:47)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.Java:280)
... 16 more
Trying next repository
ERROR: Could not clone repository
Java.io.IOException: Could not clone
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.Java:1025)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.Java:948)
at hudson.FilePath.act(FilePath.Java:912)
at hudson.FilePath.act(FilePath.Java:885)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.Java:948)
at hudson.plugins.git.GitSCM.checkout(GitSCM.Java:1114)
at hudson.model.AbstractProject.checkout(AbstractProject.Java:1411)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.Java:652)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.Java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.Java:557)
at hudson.model.Run.execute(Run.Java:1665)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.Java:507)
at hudson.model.ResourceController.execute(ResourceController.Java:88)
at hudson.model.Executor.run(Executor.Java:230)
Ich kann das Repository von der Befehlszeile aus klonen und auch git clone
als Shell-Befehl in den Jenkins-Vorbereitungsschritten des Projekts ausführen. Ich weiß nicht, warum die Plugin-Konfiguration nicht funktioniert. Ich denke, es könnte ein Authentifizierungsproblem sein. Ich habe versucht, die Anmeldeinformationen in einer .netrc-Datei anzugeben und sie in die URL aufzunehmen (z. B. https: // Benutzername: [email protected]/git/MyProject.git ) aber in allen Fällen bekomme ich immer noch den gleichen Fehler. Irgendwelche Ideen?
Dies ist ein Fehler im Jenkins Git Plugin .
Sie können das Problem mit den Anmeldeinformationen umgehen, indem Sie Anmeldeinformationen mit dem Plug-In für Anmeldeinformationen erstellen und diese Anmeldeinformationen dann im Abschnitt SCM/Git Ihres Jobs verwenden. Dies macht jedoch Ihren Benutzer/Ihr Passwort im Klartext im Build-Protokoll verfügbar, wenn die Überprüfung fehlschlägt.
Dies funktioniert auch nicht, wenn Sie einen HTTP-Proxy mit git verwenden. Der beste Weg (vorerst) ist die Verwendung von JGit (in der Jenkins-Konfiguration zu konfigurieren). JGit ist jedoch experimentell und in Bezug auf Stellvertreter auch sehr begrenzt.
(Antwort aufgrund populärer Anfrage veröffentlicht;))
Wenn Sie für Ihr Git-Repository ein selbstsigniertes Zertifikat verwenden und Git Works von der Befehlszeile aus, nicht jedoch vom Jenkins Git Client-Plugin aus, müssen Sie das Zertifikat zum Jenkins Java Keystore hinzufügen (wie in tijs in beschrieben der Kommentar oben ).
Dies liegt daran, dass das Git-Client-Plug-In versucht, eine direkte Verbindung mit Javas Apache HttpClient (unter Umgehung von git.exe) herzustellen, sodass alle Git-Einstellungen, die normalerweise zum Erstellen der Verbindung verwendet werden, ignoriert werden (einschließlich GIT_SSL_NO_VERIFY
und Zertifikaten in curl-ca-bundle.crt)
. Der HttpClient wirftSunCertPathBuilderException: unable to find valid certification path to requested target
ein, der unglücklicherweise in einen GitException ohne Stack-Trace, also alles was wir sehen können, ist 'Verbindung fehlgeschlagen'.
Um dies zu beheben, können Sie dem Link von tijs folgen: http://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification -Pfad-zum-angeforderten-Ziel/
Sie müssen die resultierende jssecacerts
-Datei nach C:\Program Files (x86)\Jenkins\jre\lib\security
kopieren, wenn Sie die Standardinstallation von Jenkins verwenden.
Einen Link zu InstallCert.Java
finden Sie im Original Andreas Sterbenz Beitrag (Dank an web.archive.org) oder in einer leicht geänderten Version unter code.google .
Ich habe den obigen Ansatz für Git Client Plugin Version 1.4.6 überprüft.
Rüsten Sie Ihren Git-Client auf 2.10.0 oder höher auf.
führen Sie die folgenden Befehle aus.
git config --system http.sslVerify false
git config --global http.sslVerify false
Meine Lösung funktionierte gut für Jenkins-Git-Plugin.
# create my exec
su root
fuckgit=/usr/bin/fuckgit
touch $fuckgit
echo "#! /usr/bin/env bash" > $fuckgit
echo "git -c sslVerify=false [email protected]" > $fuckgit
Gehe zu Systemeinstellung, setze git executable = /usr/bin/fuckgit
Erledigt.
TODO: schön dieses ans
Hauptseite von git plugin hat folgendes zu sagen:
Wenn Sie eine Ausgabe sehen, die darauf hinweist, dass Git nicht geklont werden konnte, etwas Gehen Sie wie in der Ausgabe unten zu den Jenkins-Konfigurationseinstellungen (nicht die Projekteinstellungen, sondern die globalen) und ändern Sie den Git-Pfad in ein vollständig qualifizierter Pfad (z. B. nicht "git", sondern "/ usr/bin/git" oder wo auch immer Ihre Git-Binärdatei ist installiert). Sie sollten auch sicherstellen, dass die Berechtigungen sind korrekt, wenn Sie einen Dateisystem-basierten Klon ausführen.
Started by user anonymous
Checkout:workspace / C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace - [email protected]
Last Build : #4
Checkout:workspace / C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace - [email protected]
Cloning the remote Git repository
Cloning repository Origin
$ git clone -o Origin git://github.com/bret/watir.git "C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace"
Trying next repository
ERROR: Could not clone from a repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.Java:400)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.Java:358)
at hudson.FilePath.act(FilePath.Java:676)
at hudson.FilePath.act(FilePath.Java:660)
at hudson.plugins.git.GitSCM.checkout(GitSCM.Java:358)
at hudson.model.AbstractProject.checkout(AbstractProject.Java:833)
at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.Java:314)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.Java:266)
at hudson.model.Run.run(Run.Java:948)
at hudson.model.Build.run(Build.Java:112)
at hudson.model.ResourceController.execute(ResourceController.Java:93)
at hudson.model.Executor.run(Executor.Java:118)
Dies könnte auch für Sie ein Problem sein.
Dieselbe Seite empfiehlt auch das Testen mit JGit, wenn ein Problem mit dem Standardverhalten von Plugins (-Dorg.jenkinsci.plugins.gitclient.Git.useCLI=false
) vorliegt.
Sie können Ihre git-Anmeldedaten in "Anmeldeinformationen" mit Ihrem login und Kennwort registrieren, um über das https-Protokoll auf das Git-Repository zuzugreifen (unten "Manage Jenkins" ) generiert es eine credentialId (zB dd0d6733-cc2e-4464-bb7d-4b6af86fe40a), die Jenkins bei der Verwendung dieses Berechtigungsnachweises in Pipelines hilft.
Wenn Sie Jenkins Pipeline verwenden, können Sie Folgendes tun:
node{
git url: "https://tfs:8080/tfs/job.git", branch: "feature/migration", credentialsId:'dd0d6733-cc2e-4464-bb7d-4b6af86fe40a'
}
Ihre Quellcodes werden in den Arbeitsbereich des Jobs heruntergeladen
Ich habe alles ausprobiert, um die Zertifikatsausgabe loszuwerden, aber schließlich ist es ein Problem mit Git-Plugin. Ich rolle Plugins auf git 1.5 (von 2.0.3) und git-client 1.0.7 (von 1.6.3) zurück und es hat funktioniert. Beachten Sie, dass ich zuerst git-client 1.4.6 ausprobiert habe, damit ich die Berechtigungsoption verwenden kann, aber es funktionierte nicht. Daher denke ich, dass die richtige Kombination dieser beiden Plugins wichtig ist. Diese Lösung wurde unter JENKINS-20533 erwähnt.
Um Git in Jenkins verwenden zu können, müssen die folgenden zwei Plugins installiert werden:
Das erste Plugin (Git-Client-Plugin) ist eine Low-Level-API zum Ausführen von git-Vorgängen (git add, git commit, git Push, git clone usw.).
Das zweite Plugin (Git-Plugin) fügt Git als SCM-Option für Jenkins-Jobs hinzu.
Das zweite Plugin basiert auf der Funktionalität des ersten Plugins. Daher müssen beide vorhanden sein, damit Git mit Jenkins zusammenarbeiten kann.
git: // anstelle von https: // funktioniert bei mir auf jenkins 1.644 mit git-client 1.19.6
Dies ist nun behoben und kein Problem mehr mit dem aktuellen Plugin (wie ich dieses 1.19.0 schreibe). Das passierte mit git-plugin-client 1.6.x.
In meinem Fall arbeitete ein Jenkins-Sklave normal, ein anderer nicht. Als ich die ausführbare Git-Datei in JGit geändert habe, funktionierten beide.