Как я могу заставить SCP и ftp (из командной строки, а не из плагина) работать в hudson

Я запускаю сервер Hudson CI на машине win32. После успешной сборки я хочу, чтобы созданный exe-файл был размещен на общедоступном веб-сайте. Плагины hudon для SCP и ftp не работали так, как я хотел (в основном потому, что он выбирает несколько странных каталогов для их размещения), поэтому я сделал свой собственный скрипт для командной строки scp, который вызывает hudson.

Однако по какой-то причине при запуске в среде hudson bat-файл scp зависает. Он отлично работает, когда я вызываю его из командной строки на той же машине.

По-видимому, это также не работает при запуске из планировщика задач.

Может ли кто-нибудь придумать причину, по которой это не сработает в среде hudson или планировщика?

pscp.exe -batch -q -pw mypassword ..\..\installers\Output\myfilename  [email protected]:domains/domain.com/html/downloads

(Обратите внимание, что «domain.com» — это замена моего доменного имени...)

Опять же, когда я вызываю этот bat-файл из командной строки, он работает нормально.

Также обратите внимание: причина, по которой я называю bat-файл, заключается в том, что я заменяю имя файла командой svn WCREV, поскольку мозг Хадсона мертв и не может выполнить эту замену ни в плагинах scp, ни в ftp, ни в вызовах командной строки. Этот метод должен работать плавно, но он зависает.

pscp — это программа ssh из командной строки, связанная с Putty.

Еще одна проблема, с которой я сталкиваюсь, заключается в том, что этот проект имеет доступ к двум репозиториям svn, поэтому hudson запутывается и не может предоставить номер версии svn по желанию в тех местах, где я ожидаю, что он будет доступен. (Одно репо предназначено для сторонних вещей, а другое — наша кодовая база). Мы используем svn rev из нашей кодовой базы как часть идентификатора, чтобы назвать созданный установщик.

Я был бы рад использовать ftp или scp из hudson (плагины), но они, кажется, не работают для меня вообще, учитывая места, в которые hudson решает поместить файлы (используя номера сборки - я не хочу использовать сборку hudson). номера для идентификации сборки - я предпочитаю версию svn) - поэтому я использую версии командной строки, но они тоже не работают - они зависают в процессе сборки hudson.


person Tim    schedule 12.07.2010    source источник


Ответы (3)


Я сам столкнулся с той же проблемой. Проблема в том, что pscp (как и все PuTTY) требует, чтобы ключ хоста для сервера, к которому вы подключаетесь, был загружен в реестр (в HKEY_CURRENT_USER). Без ключа хоста pscp отклонит хост как недействительный (должно быть сообщение об ошибке, которое отображается в выводе консоли, если вы каким-то образом не подавили его. Это одноразовая вещь, но ее необходимо сделать для каждого пользователя, работающего команда.

Это основной процесс, который я использую:

  1. Подключитесь к серверу и порту с помощью PuTTY. Примите ключ хоста, когда будет предложено.
  2. Беги regedit.exe
  3. Перейти к HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  4. Экспортируйте соответствующий ключ хоста в файл .reg (щелкните правой кнопкой мыши SshHostKeys и выберите экспорт).
  5. Войдите в систему как пользователь, запускаемый Hudson, и импортируйте экспортированный файл .reg.

Если Hudson работает как локальная система, вы можете использовать PsExec или метод, описанный в этом блоге MSDN для запуска команду в качестве учетной записи локальной системы.

После того, как вы сделали это один раз, команда должна работать под управлением Hudson.

Изменить

Две ссылки — это просто способы запуска командной строки в качестве локальной системы. Вы можете узнать, под каким идентификатором пользователя работает Hudson, открыв панель управления службами (services.msc), найдя службу Hudson и проверив, что она говорит в столбце «Войти как».

Если это не локальная система, вы сможете войти в Windows как пользователь и импортировать reg-файл. Если он запускается как локальная система (по умолчанию), вы не можете войти в Windows и должны использовать либо PsExec, либо метод, описанный в блоге MSDN, для импорта файла реестра в дерево HKEY_CURRENT_USER локальной системы.

person ig0774    schedule 12.07.2010
comment
Спасибо. В этом есть смысл. Я подавил вывод - но я могу посмотреть на него, я думаю. Я запускаю hudson как сервис на этой машине. Я действительно не могу понять, как эти две ссылки, которые вы указываете, помогут мне. - person Tim; 12.07.2010
comment
Хм. Я все это понял - я думаю, что моя путаница во второй ссылке (я запускаю службу под локальным хостом). Указанный вами URL-адрес, похоже, ничего не обсуждает в реестре... Но, возможно, я что-то упускаю. - person Tim; 12.07.2010
comment
@ Тим: это не так. Но запуск командной строки позволит вам импортировать файл реестра. Вы также можете взглянуть на WinSCP, который очень зрелый. - person ig0774; 13.07.2010
comment
Я должен быть глупым - как эта командная строка импортирует реестр? - person Tim; 13.07.2010
comment
@Tim: вам нужно запустить команду, чтобы сделать это, что-то вроде regedit /s hostkeys.reg - person ig0774; 13.07.2010

Как насчет обновления шпатлевки с помощью Quest PuTTY. Он основан на PuTTY и предлагает параметр -auto_store_key_in_cache. Это должно решить вашу проблему.

См. также похожий вопрос в SuperUser.

person Peter Schuetze    schedule 12.07.2010
comment
Что именно мне делать с PLink? У меня есть командная строка pscp, которую я использую. Я просто использую plink для создания ключа, а затем могу использовать pscp или использовать plink вместо pscp? - person Tim; 12.07.2010
comment
plink = putty - GUI , это означает, что у вас есть только командная строка, в которую вы можете передавать свои команды из файла. Поскольку вы хотите выполнить передачу файлов, вам нужно использовать scp. который поставляется с версией замазки Quest. Quest PuTTY — это расширенная версия последних инструментов PuTTY. - person Peter Schuetze; 13.07.2010

Я решил свою проблему, используя учетную запись, которая могла запускать команды scp из командной строки. В частности, в конфигурации служб я настроил службу hudson на использование другого пользователя, которого я настроил, а не системную учетную запись.

Вероятно, это не лучший способ решить проблему, но в краткосрочной перспективе он сработал для меня.

person Tim    schedule 13.07.2010