Как настроить плагин 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".