Как настроить плагин Hudson и git с ключом SSH

У меня есть Hudson (система непрерывной интеграции) с плагином git, запущенным в Tomcat Windows Service. msysgit установлен, и путь msysgit bin находится в пути. PuTTY/Pageant/plink установлены, и msysgit настроен на их использование.

Когда я запускаю задание, пытающееся клонировать репозиторий git, я получаю следующую ошибку:

$ git clone -o origin [email protected]:project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace" 
ERROR: Error cloning remote repo 'origin' : Could not clone [email protected]:project.git 
ERROR: Cause: Error performing git clone -o origin [email protected]:project.git e:\HUDSON_HOME\jobs\Project Trunk\workspace 
Trying next repository 
ERROR: Could not clone from a repository 
FATAL: Could not clone 
hudson.plugins.git.GitException: Could not clone 
  • Выполнение git clone -o origin git @hostname: project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace" из командной строки работает без ошибок.
  • Я подтвердил, что моя проблема не совпадает с Hudson git clone error, потому что git находится в пути, и я не получаю никаких ошибка об исполняемом файле git на странице системы Hudson Configure System.

Это заставляет меня думать, что проблема в том, что пользователь, которому принадлежит служба Tomcat/Hudson Windows (локальная система), не имеет ключа SSH, настроенного для клонирования хранилища git.

Мой вопрос в том, как я могу настроить вещи так, чтобы плагин git plugins/msysgit знал, чтобы использовать конкретный ключ SSH при попытке клонирования? Я не думаю, что Pageant будет работать, потому что служба Tomcat работает как пользователь "Local System", но я могу ошибаться. Я пробовал настройку Pageant как службу (используя runassvc.exe), передав соответствующий ключ и выполнив ее как "Локальная система". Служба Tomcat/Hudson, похоже, не может видеть ключ от службы просмотра. Существуют ли другие методы настройки ключа?

Спасибо.

EDIT: обсуждение http://n4.nabble.com/Hudson-with-git-and-ssh-td375633.html показывает, что у кого-то был аналогичный вопрос. ssh-agent был предложен, и этот инструмент действительно поставляется с msysgit, но я не уверен, как его использовать в сочетании с сервисом Hudson. Тем не менее, хорошая подсказка, если кто-то может заполнить пробелы. Спасибо Питеру за комментарий со ссылкой.

Кроме того, обсуждение вопроса о http://n4.nabble.com/questions-about-git-and-github-plug-ins-td383420.html начинается с того же вопроса. Я пытаюсь воскресить эту нить.

Ответы

Ответ 1

Мы используем Hudson, проверяя исходный код от git с помощью ssh-ключа. Однако у нас есть Hudson на сервере ubuntu. Клавиатура hudson ssh находится в ~hudson/id_rsa и ~hudson/id_rsa.pub

Итак, адаптируя наш совет для настройки Windows:

Разработчики Windows в нашей команде используют MSysGit и регулярно проверяют код через git поверх ssh - но не используют Putty/Pageant. Мы обнаружили, что Pageant является болезненным из-за некоторых ошибок протокола с логином. Вместо этого они сконфигурировали git для использования openSSH (это один из вариантов во время установки). Их пара с открытым/закрытым ключом живет в ~username/id_rsa и ~username/id_rsa.pub, и все это работает.

Итак, я бы рекомендовал изменить конфигурацию git для использования OpenSSH, а не для просмотра. Если ничего другого, вам не нужно беспокоиться о старте.

Вы можете использовать PuttyGen для генерации ключа. Тем не менее, если вы используете OpenSSH, а не конкурс, вам нужно будет экспортировать подходящий закрытый ключ (из одного из меню вверху PuttyGen) и сохранить его как id_rsa, а также скопировать и вставить открытый ключ из PuttyGen GUI (он показывает, но не сохранит подходящую версию для OpenSSH) и сохраните его как id_rsa.pub. Это связано с тем, что Putty использует немного другой формат для ключа, чем OpenSSH.

В качестве альтернативы, конечно, вы всегда можете разместить свой сервер hudson на сервере ubuntu (либо реальном, либо через VirtualBox).

Ответ 2

Еще одно важное замечание для окон (которое я хочу приложить к этому ответу, потому что я нашел этот вопрос очень быстро, но нашел эту дополнительную деталь, которая мне нужна только после нескольких часов поиска):

Git хочет, чтобы переменная окружения% HOME% была установлена ​​в ваш каталог пользователя (IE C:\Documents and Settings\hudsonuser)... что он знает, как искать там файл .ssh с ключевыми файлами!

Я нашел это здесь, на ошибке сервера (но не имеет достаточной репутации, чтобы его повышать).

Ответ 3

Я обнаружил, что мне пришлось использовать другой подход, чтобы заставить это работать с Ubuntu (с Jenkins, а не с Hudson, хотя в противном случае это похоже на ту же проблему). Я проверил переменную среды %HOME% через Jenkins GUI, и это выглядело правильно.

Ключ, который я хотел использовать для идентификации Jenkins в частном репозитории Github, уже существует. Я скопировал их в /var/lib/jenkins/.ssh - как файл id_rsa, так и id_rsa.pub для этого ключа и учетной записи.

Первоначально я скопировал их как "root", и они были недоступны для Jenkins, поэтому я все еще получал ошибки (путано, ошибки просили меня ввести кодовую фразу, когда ее не было), Поэтому я сделал chown, chmod и chgrp, чтобы они были доступны для Jenkins.

Я протестировал это, выполнив клон git во время входа в систему как пользователь Jenkins.

Я знаю, что этот путь специфичен для Ubuntu, но аналогичная настройка, обеспечивающая доступ к ключевым файлам в нужном месте и тестирование в командной строке, выполняющей только git clone git:myrepo, может по крайней мере определить, где Windows отличается.

Ответ 4

поместите свою папку .ssh в

C:\Windows\SysWOW64\config\systemprofile

или

C:\Windows\System32\Config\systemprofile

зависит от вашей системы 32 или 64.

Это каталог "USER" для "Local System".