Jenkins nie łączy się z repozytorium git

11

Nie mogę skonfigurować adresu URL repozytorium git w taki sposób, aby Jenkins mógł uzyskać do niego dostęp.

w obszarze „Projekt> Konfiguruj> Zarządzanie kodem źródłowym” ustawiam URL repozytorium na „git @ store: repositories / testproject.git”

Otrzymuję ten błąd:

Failed to connect to repository : Command "/usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password). 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

dostęp z tym adresem URL działa na powłoce:

jenkins@dilbert:~$ /usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git
git@store's password: 
4fd35a4f528e2f2921a52cfd03918b7cbde3d253    refs/heads/master

Zostaniesz poproszony o hasło i działa.

Powiązałem to samo hasło z poświadczeniami w Jenkins z „git /”, a także próbowałem „git @ store /”. Żaden nie działał.

Zauważ, że nie chodzi o github, ale o lokalne repozytorium git.

aktualizacja:

dodanie klucza pub od master jenkins do build slave, pomogło w uruchomieniu konfiguracji:

ssh-copy-id jenkins@dilbert

teraz kompilacje kończą się niepowodzeniem:

 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/bin/git config remote.origin.url git@store:repositories/testproject.git # timeout=10
Fetching upstream changes from git@store:repositories/testproject.git
 > /usr/bin/git --version # timeout=10
 > /usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@store:repositories/testproject.git
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:735)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:983)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1016)
    at hudson.scm.SCM.checkout(SCM.java:484)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
    at hudson.model.Run.execute(Run.java:1751)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:89)
    at hudson.model.Executor.run(Executor.java:240)
Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

store jest mistrzem Jenkinsa, dilbert jest niewolnikiem kompilacji. ssh od master do slave działa.

jenkins@store:~$ ssh dilbert uptime
 16:06:21 up 3 days, 18:53, 13 users,  load average: 0,31, 0,38, 0,50

jakieś pomysły, jak to debugować?

Jörg Beyer
źródło

Odpowiedzi:

5

uwierzytelnianie działa przez ssh. czy dodałeś publiczny klucz ssh użytkownika Jenkins do użytkownika git na swoim serwerze git?

daj mi znać, jeśli potrzebujesz instrukcji, jak skonfigurować uwierzytelnianie ssh, a ja zmodyfikuję ten post tutaj.

/EDYTOWAĆ:

cieszę się, że go uruchomiłeś. szukałem na oficjalnej stronie Jenkins szczegółowej instrukcji dotyczącej części ssh konfiguracji, ale nie mogłem jej znaleźć.

oto krótki przegląd - daj mi znać, jeśli tego potrzebujesz.

  1. jenkins slave (maszyna do budowania) łączy się z serwerem git (jenkins master)
  2. maszyna budowlana działa jako użytkownik Jenkins (np. Jenkins @ dilbert: ~ $)
  3. git-server działa jako użytkownik git (np. git @ store: ~ $)
  4. Klucz publiczny jenkins @ dilbert należy umieścić w kluczach autoryzowanych git @ store
  5. uruchom, jenkins@dilbert:~/.ssh$ ssh-copy-id git@storeaby skopiować klucz publiczny jenkins @ dilbert ssh na serwer git
kindaleek
źródło
czy mógłbyś wyjaśnić, którzy użytkownicy ssh-key dodają gdzie?
Jörg Beyer
Jenkins użytkownik powinien mieć jego pub-key przechowywane w <jenkins domu użytkownika dir> / ssh / id_rsa.pub ten jeden musi zostać dodany do <git domu użytkownika dir> / ssh / authorized_keys..
kindaleek
robi "jenkins @ store: ~ / .ssh $ ssh-copy-id git @ store" get jenkins, aby zaakceptować konfigurację (to jest poprawa), ale kompilacja na zdalnym niewolniku jenkins kończy się niepowodzeniem. dowolny pomysł?
Jörg Beyer
dobrze czytać. niestety, moje doświadczenie z git kończy się właściwie tam ... ale pamiętam podobny problem w pracy. mogę się teraz mylić, ale musisz pracować jako użytkownik (np. Joerg Beyer) na platformie git, prawda? sprawdź tam uprawnienia (możesz zmienić uprawnienia użytkowników w interfejsie internetowym dla każdej grupy, do której należą). spróbuj ustawić go jako programistę do testowania / EDYCJI: napisałeś zdalnego jenkins slave - jeśli używa innej pary kluczy, musisz jeszcze raz dodać klucz publiczny do kluczy autoryzowanych
gita
niepewny. Zaktualizowałem pytanie. Jaki klucz ssh muszę dodać gdzie?
Jörg Beyer