У меня есть Hudson (система непрерывной интеграции) с плагином git, работающим на Tomcat Windows Service. msysgit установлен, а каталог bin msysgit находится в пути. PuTTY / Pageant / plink установлены, и msysgit настроен для их использования.
Я думаю, что проблема, с которой я столкнулся, заключается в том, что у пользователя, владеющего сервисом Tomcat / Hudson (локальная система), нет ключа SSH, настроенного для клонирования репозитория git. Когда плагин git Hudson пытается клонировать, он выдает ошибку:
$ git clone -o origin git@hostname:project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace"
ERROR: Error cloning remote repo 'origin' : Could not clone git@hostname:project.git
ERROR: Cause: Error performing git clone -o origin git@hostname: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 plugin / msysgit знал, что нужно использовать конкретный закрытый ключ SSH при попытке клонирования? Я не думаю, что Pageant будет работать, потому что служба Tomcat работает от имени пользователя «Локальная система», но я могу ошибаться.
РЕДАКТИРОВАТЬ:
Я пробовал настроить Pageant как службу (используя runassvc.exe), передав соответствующий ключ и запустив его как «Локальная система». Другая служба, похоже, не видит ключ от службы конкурса.
Вы определенно должны иметь возможность запустить это под несистемным пользователем. Выберите / создайте пользователя для запуска Hudson, затем попробуйте подключиться к серверу с помощью ssh user @ host. Если он запрашивает пароль, он, очевидно, не находит ваш ключ.
В этом случае дважды проверьте, что ключ загружен в конкурс (вам нужно, чтобы конкурс загружал соответствующий ключ с диска каждый раз при его запуске), и что переменная среды GIT_SSH установлена.
Еще один способ сделать это - установить в переменной среды GIT_SSH ссылку на ключ. В настоящее время я делаю это с туннелем и SV, поэтому, например, моя переменная SVN_SSH - "sexec -pk = 1", где sexec - это интерфейс командной строки ssh туннелирующего устройства, а -pk = 1 указывает ему использовать мой закрытый ключ в слоте 1.
Вы можете сделать это с помощью ключей openssh вместо замазки; Putty требует запуска конкурса, но с ключом openssh вам просто нужно, чтобы ключ id_rsa находился в ~ / .ssh
Обычно я бы сделал это, настроив Jenkins для работы в качестве нового пользователя, которого я создаю. Я перехожу в домашний каталог пользователя (C: \ Users \ по умолчанию в Windows Vista и более поздних версиях) и создаю каталог .ssh, в который помещаю файл id_rsa с закрытым ключом, который я хочу использовать в формате openssh.
Мне просто нужно было придумать похожий трюк на Mac: http://colonelpanic.net/2011/06/jenkins-on-mac-os-x-git-w-ssh-public-key/