Chciałbym, aby Jenkins automatycznie pobierał dane z mojego prywatnego repozytorium hostowanego na Github. Ale nie mam pojęcia, jak wykonać to zadanie. Wypróbowałem dokumentację, wygenerowałem klucz ssh dla użytkownika jenkins i widzę tylko: „nie można sklonować repozytorium”. Sprawdziłem adresy URL - są prawidłowe.
Jakieś wskazówki, może znasz jakieś dokumenty / blogi / cokolwiek, które opisują tego rodzaju rzeczy?
Odpowiedzi:
Być może obsługa GitHub dla kluczy wdrażania jest tym, czego szukasz? Aby zacytować tę stronę:
Jeśli tego już próbujesz i nie działa, możesz zaktualizować swoje pytanie, podając więcej szczegółów dotyczących używanych adresów URL, nazw i lokalizacji plików kluczy itp.
A teraz część techniczna: jak używać klucza SSH z Jenkinsem?
Jeśli masz, powiedzmy,
jenkins
użytkownika systemu UNIX, możesz przechowywać klucz wdrożenia w~/.ssh/id_rsa
. Kiedy Jenkins spróbuje sklonować repozytorium przez ssh, spróbuje użyć tego klucza.W niektórych konfiguracjach nie można uruchomić Jenkinsa jako własnego konta użytkownika i prawdopodobnie nie można również użyć domyślnej lokalizacji klucza ssh
~/.ssh/id_rsa
. W takich przypadkach możesz utworzyć klucz w innej lokalizacji, np.~/.ssh/deploy_key
I skonfigurowaćssh
go tak, aby używał go z wpisem w~/.ssh/config
:Ponieważ wszyscy uwierzytelniacie się we wszystkich repozytoriach Github, używając
[email protected]
i nie chcecie, aby powyższy klucz był używany do wszystkich połączeń z Github, utworzyliśmy alias hosta github-deploy-myproject . Twój sklonowany adres URL ma teraz postaći to również jest to, co umieszczasz jako adres URL repozytorium w Jenkins.
(Należy pamiętać, że trzeba nie umieścić ssh: // z przodu, aby to zadziałało).
źródło
ssh-keygen
jako użytkownika Jenkins („jenkins” na moim serwerze Ubuntu). Następnie dodałem~jenkins/.ssh/id_rsa.pub
do sekcji kluczy wdrażania w repozytorium na github.~
katalogu. Ale/var/lib/jenkins/.ssh/
żeby domyślny użytkownik jenkins używał tych kluczy!/var/lib/jenkins
jest to katalog domowy (~
)jenkins
użytkownika.Could not match github-deploy-myproject:myuser/myproject
w dzienniku przechwytywania. Wpisałem to, ponieważ mój adres URL repozytorium i kompilacje działają, dzięki czemu może uzyskać dostęp do GitHub. To tylko post z GitHub, który nie uruchamia kompilacji.Jedna rzecz, która sprawiła, że
github.com
to zadziałało, to upewnienie się, że jest w~jenkins/.ssh/known_hosts
.źródło
Jeśli potrzebujesz Jenkinsa, aby uzyskać dostęp do więcej niż 1 projektu, będziesz musiał:
1. dodać klucz publiczny do jednego konta użytkownika github
2. dodać tego użytkownika jako właściciela (aby uzyskać dostęp do wszystkich projektów) lub jako współpracownika w każdym projekcie.
Wiele kluczy publicznych dla jednego użytkownika systemu nie będzie działać, ponieważ GitHub znajdzie pierwszy dopasowany klucz wdrożenia i odeśle błąd, taki jak „BŁĄD: Odmowa dostępu do użytkownika / repo2 dla użytkownika / repo1”
http://help.github.com/ssh-issues/
źródło
Jenkins tworzy użytkownika Jenkins w systemie. Klucz ssh musi zostać wygenerowany dla użytkownika Jenkins. Oto kroki:
Teraz możesz utworzyć poświadczenie Jenkins za pomocą klucza SSH Na pulpicie nawigacyjnym Jenkins Dodaj poświadczenia
wybierz tę opcję
źródło
Miałem podobny problem z gitlabem. Okazuje się, że ograniczyłem użytkowników, którzy mogą logować się przez ssh. Nie wpłynie to na użytkowników github, ale na wypadek, gdyby ludzie trafili tutaj z powodu problemów z gitlab (i tym podobnymi), upewnij się, że dodałeś
git
doAllowUsers
ustawienia w/etc/ssh/sshd_config
:źródło
Inną opcją jest użycie osobistych tokenów dostępu GitHub :
https://github.com/my-username/my-project.git
)github-token-for-my-username
Przetestowałem to na Jenkins ver. 2.222.1 i wtyczka Jenkins GitHub 1.29.5 z prywatnym repozytorium GitHub.
źródło
Alternatywą dla odpowiedzi z sergey_mo jest utworzenie wielu kluczy ssh na serwerze jenkins.
(Chociaż, jak powiedział pierwszy komentator odpowiedzi sergey_mo, może to być bardziej bolesne niż zarządzanie jedną parą kluczy).
źródło