Дженкинс - невозможно выполнить клонирование git с подчиненного узла. SSH-ключи

Я только что настроил свой первый ведомый Jenkins. Я запускаю сборку и у меня возникают проблемы с ключами SSH. Главный сервер Jenkins работает под пользователем jenkins. Я настроил ключи SSH таким образом, что могу использовать SSH от главного устройства к подчиненному без пароля.

например От мастера:

jenkins@master:~$ ssh slave
Last login: Tue Apr 17 10:30:22 2012 from masterjenkins.com
$ whoami
jenkins

Таким образом, это доказывает, что подчиненный узел также работает под пользователем «jenkins». (Я скопировал открытый ключ ssh с jenkins@slave на удаленный сервер git). И я могу запустить клон git вручную с подчиненного устройства, но когда я запускаю сборку с мастера, я получаю такие сообщения:

    ERROR: Error cloning remote repo 'origin' : Could not clone git@host:abc
hudson.plugins.git.GitException: Could not clone git@host:abc
Caused by: hudson.plugins.git.GitException: Error performing command: git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc_build
Command "git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc_build" returned status code 128: Initialized empty Git repository in /var/lib/jenkins/workspace/abc_build/.git/
Host key verification failed.
fatal: The remote end hung up unexpectedly
Caused by: hudson.plugins.git.GitException: Command "git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc_build" returned status code 128: Initialized empty Git repository in /var/lib/jenkins/workspace/abc_build/.git/
Host key verification failed.
fatal: The remote end hung up unexpectedly
Trying next repository
ERROR: Could not clone repository
FATAL: Could not clone

Так что это все еще намекает на то, что мои ключи SSH настроены неправильно. Кто-нибудь может сказать мне, какие ключи мне нужно скопировать куда?

Большое спасибо, ns


person nonshatter    schedule 17.04.2012    source источник
comment
также ошибка проверки ключа хоста, по-видимому, указывает на то, что ваш пользователь Jenkins никогда не подключался к этому серверу по ssh, и вы не принимали ключ хоста, попробуйте sshing из CLI от имени пользователя jenkins, чтобы убедиться, что он работает, и примите ключ хоста .   -  person Doon    schedule 17.04.2012
comment
@Doon Это может стать проблемой. Я изначально думал, что вы пытаетесь подключиться по ssh с той же машины, с которой Дженкинс пытается клонировать.   -  person Andrew T Finnell    schedule 17.04.2012
comment
Достал ублюдка! Спасибо за все Ваши ответы. Я скопировал и вставил команду, которую jenkins пытался запустить на подчиненном устройстве: git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc, и оказалось, что у меня есть несколько неверных ключей в /root /.ssh/known_hosts После их удаления и повторного подключения к репозиторию git все заработало!   -  person nonshatter    schedule 17.04.2012


Ответы (1)


Судя по URL-адресу клона, вы смешиваете два разных метода аутентификации. Вы пытаетесь подключиться к хосту по SSH как пользователь git, а не jenkins. Обычно, когда вы размещаете свои собственные репозитории GIT и клонируете их с помощью git@servername:reponame, вы используете что-то вроде gitolite.

Вы ставили что-нибудь типа гитолита?

Вместо этого попробуйте ssh'ing как пользователь jenkins.

ssh git@slave 

Затем посмотрите, что это возвращает. Это SSH больше соответствует тому git@host:abc, что вы делаете.

Если вы ничего не устанавливали на своем сервере, измените URL-адрес клона на jenkins@host:pathtorepo.

Обновить

/home/git/.ssh/authorized_keys

Должна быть такая запись: (Все это в ОДНОЙ строке)

# gitolite start
command="/home/git/bin/gl-auth-command jenkins",no
-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAt3+od84Gc9NBVrVb3MKjekHcBDwXXONnVYMNVpuRadoz/FPJTkOIxozKVPJDPI670O252giYpF59sOKqAJL0xEVUrhq8cDFuFwQsSAp0ed1kp/GRxx+pwytL58rcVJEHAy2DkD1z5HlNaZyvIxQyfLTnYfuL1Hx6Qe7dal7mXO0= keycomment
# gitolite end

Добавьте разрешения репозитория для jenkins в gitolite: (Возможно, вам придется клонировать на той же машине, на которой размещены ваши репозитории, в качестве пользователя gitolite)

git clone git@host:gitolite-admin 
cd gitolite-admin
cd conf
vi gitolite.conf

Теперь найдите запись для «abc» или добавьте ее, если она не существует.

repo    abc
  RW+            = jenkins

Теперь зафиксируйте и отправьте изменения

git commit -a -m "Adding user jenkins to repo abc"
git push

Теперь выполните ssh git@host еще раз, чтобы узнать, сообщает ли gitolite о ваших новых разрешениях.

person Andrew T Finnell    schedule 17.04.2012
comment
Привет, извините, да, я забыл добавить, что мы используем gitolite для управления нашими пользователями git. ssh'ing от мастера к подчиненному, поскольку ssh git@slave просто запрашивает пароль. Одна вещь, которая беспокоит меня, заключается в том, что я не мог легко найти простой способ увидеть, кто Дженкинс работает как на рабе. После входа в подчиненный я сделал ssh-keygen и сохранил файлы в местоположении по умолчанию, которое было /home/jenkins/.ssh/id_rsa. Затем я скопировал открытый ключ в gitolite. - person nonshatter; 17.04.2012
comment
@nonshatter Это означает, что gitolite или что-то еще настроено неправильно. Вы уверены, что author_keys правильно настроены на вашем сервере? Я использую gitlab для управления своим экземпляром gitolite. Пока вы не сможете успешно использовать ssh git@host без пароля, ваши клоны не будут работать. Первое, что нужно проверить, это то, что author_keys на сервере для пользователя git и ваше имя jenkins в нем с правильным открытым ключом. - person Andrew T Finnell; 17.04.2012
comment
От ведомого: $ ssh git@host PTY allocation request failed on channel 0 hello jenkins, this is gitolite v2.1-31-gf0cedeb running on git 1.7.0.4 the gitolite config gives you the following access: @R_ @W_ testing R W abc Connection to host closed. - person nonshatter; 17.04.2012
comment
@nonshatter Имя репо называется «тестирование», которое вы пытаетесь клонировать из Дженкинса? - person Andrew T Finnell; 17.04.2012
comment
Эй, нет, это называется 'abc'. Нормально ли, что gitolite закрывает соединение сразу после печати разрешений? Извините, это все новые технологии для меня. - person nonshatter; 17.04.2012
comment
@nonshatter Тогда кажется, что gitolite настроен только на то, чтобы предоставить вам доступ к репозиторию под названием «тестирование». Я обновлю свой ответ о том, как добавить репо 'abc' - person Andrew T Finnell; 17.04.2012
comment
@nonshatter, одна вещь, которая меня беспокоит, заключается в том, что я не мог легко найти простой способ увидеть, кто jenkins работает как на подчиненном устройстве - один из способов сделать это - создать задание, прикрепленное к подчиненному устройству, которое запускает whoami в оболочке шаг сборки. - person malenkiy_scot; 17.04.2012
comment
@nonshatter Мы можем принести это в чат, если это необходимо. Просто дай мне знать. - person Andrew T Finnell; 17.04.2012
comment
Хорошо, вот обновление: я запускаю whoami как шаг сборки jenkins, и он говорит мне, что ведомое устройство на самом деле работает от имени пользователя root. Я скопировал открытый ключ с мастера на авторизованные ключи на ведомом устройстве. Теперь я могу ssh без пароля как root-›slave. Я указал, что корневой каталог jenkins FS принадлежит пользователю root. Теперь я получаю немного другие сообщения: Command "git fetch -t git@host:abc +refs/heads/*:refs/remotes/origin/*" returned status code 128: Host key verification failed. fatal: The remote end hung up unexpectedly ... Есть мысли? - person nonshatter; 17.04.2012
comment
@charlesb, если у вас возникла проблема с ключом хоста, вам нужно запустить команду ssh и принять ключ хоста или добавить его в файл known_hosts. - person Andrew T Finnell; 13.12.2012