Wie fix ein permission denied (publickey) Fehler für ein git submodule update in der Github, Travis-CI erstellen?
Ich kann nicht update-git-submodule, mit der Fehlermeldung:
$ git submodule init
Submodule 'build/html' ([email protected]:quadroid/clonejs.git) registered for path 'build/html'
...
$ git submodule update
Cloning into 'build/html'...
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Aber wenn ich die gleichen Aufgaben lokal, ist alles OK.
Wie kann ich dieses Problem beheben, so dass die Travis-CI-build geht und ich kann immer noch klicken Sie auf das Submodul in das repo zu direkt zu ihm?
- behoben durch ändern Submodul url git://github.com/quadroid/clonejs.git Aber jetzt kann ich nicht schieben Sie das Modul lokal...
- verwenden Sie ein deploy-key oder ein Skript, ändern Sie die URL nur in travis, nicht auf Ihrem lokalen
- Dieser Artikel hat mir geholfen awolski.com/sudden-permission-denied-publickey-error-in-travis In kurzen, müssen Sie deaktivieren und aktivieren Travis-builds für das repository an.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese kann (zum Glück) leicht gelöst werden, indem Sie ändern die .gitmodules-Datei on-the-fly auf Travis, so dass die SSH-URL ersetzt wird mit der öffentlichen URL, die vor der Initialisierung Submodule. Um dies zu erreichen, fügen Sie die folgende .travis.yml:
Dank an Michael Iedema für seine gist, aus dem ich abgeleitet, die diese Lösung.
Wenn Ihr Submodule sind private repositories, es sollte sich um die Anmeldeinformationen, die in der https-URLs, die ich empfehlen, einen GitHub access-token mit eingeschränkten Berechtigungen für diesen Zweck:
https://user:[email protected]/organization/repo.git
? Wenn ja, können Sie ändern Sie den sed-Befehl entsprechend. Lassen Sie mich wissen, wenn dieses für Sie arbeitet. Siehe Travis Pro-Dokumentation für die Referenz./
beim Austausch in URLs, etc.sed -i 's|[email protected]:|https://github.com/|' .gitmodules
Ich würde empfehlen, mit der
https
Schema für Submodule, als dass Sie erlauben, Sie zu ziehen auf Travis und push-lokal:https://github.com/quadroid/clonejs.git
.Travis unterstützt jetzt den Zugriff auf submodule mit ssh, das ist bei weitem die einfachste Lösung. Sie müssen nur verknüpfen Sie Ihre ssh-Schlüssel (oder den ssh-Schlüssel eines dedizierten CI-Benutzer) mit dem Github-Projekt, das Sie bauen, wie beschrieben in der Dokumentation für den privaten Abhängigkeiten.
$ travis sshkey --upload ~/.ssh/id_rsa -r myorg/main
Beachten Sie, dass Travis empfiehlt die Erstellung eines dedizierten Benutzer, so dass Sie nicht haben, um mit Ihrem eigenen ssh-Schlüssel.
Erhalten Sie diesen Fehler, weil Sie angegeben Ihre Teilgebiete via ssh-urls. Für ssh-Zugriff über die travis-ci-Umgebung müssen Sie konfigurieren Sie eine Taste.
Alternativ, Sie können einfach, verwenden Sie relative URLs für Ihr git-Submodule da Ihr Projekt und Ihre Teilgebiete sind alle verfügbar auf Github.
Git löst relative urls gegen die
ORIGIN
.Beispiel:
Anhand der ersten 2 Einträge von Ihrem
.gitmodules
:Ersetzt mit relativen URLs:
Dann, wenn das Klonen - sagen wir - über-https-Ursprung festgelegt ist, wie diese:
Beim Klonen via ssh:
Mit relativen urls, die üblichen Submodul Sequenz arbeitet unabhängig von der Herkunft:
Können Sie auch einfach direkt zu manipulieren .gitmodules-Datei über
git
. (Inspiriert durch diese Antwort).