Использование PuTTY в командной строке от Hudson
Я пытаюсь использовать PuTTY в командной строке из задания Хадсона.
Команда следующая:
putty -ssh -2 -P 22 USERNAME@SERVER_ADDR -pw PASS -m command.txt
Где 'command.txt' - это сценарий оболочки, который выполняется на сервере через SSH.
Если я запускаю эту команду из командной строки Windows, она работает. Сценарий оболочки выполняется на сервере.
Если я запускаю сборку задания Hudson, настроенную с помощью этой пакетной команды, она не работает. Сборка запущена... и работает... и работает.. ничего не делая, и я должен остановить это вручную.
Можно ли запустить внешнюю программу (то есть PuTTY) из задания Hudson?
PS: я попробовал плагин SSH, но... не очень хороший плагин (сборка до / после, состояние сбоя команд, запущенных не пойманными Хадсоном и т. Д.)
Это журналы сборки:
[workspace] $ cmd /c call C:\WINDOWS\TEMP\hudson7429256014041663539.bat
C:\Hudson\jobs\Artifact deployer\workspace>putty -ssh -2 -P 22 USER@SERV_ADD -pw PASS -m com.txt
Le build a été annulé
Finished: ABORTED
И файл Hudson.err.log одновременно (после остановки):
3 juin 2010 18:27:28 hudson.model.Run run
INFO: Artifact deployer #6 aborted
java.lang.InterruptedException
at java.lang.ProcessImpl.waitFor(Native Method)
at hudson.Proc$LocalProc.join(Proc.java:179)
at hudson.Launcher$ProcStarter.join(Launcher.java:278)
at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:83)
at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:58)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601)
at hudson.model.Build$RunnerImpl.build(Build.java:174)
at hudson.model.Build$RunnerImpl.doRun(Build.java:138)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416)
at hudson.model.Run.run(Run.java:1241)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:124)
Мой сценарий оболочки пишет "hello" только в файле "hello.txt" на сервере, и ничего не делается.
4 ответа
Проблема в том, что вам нужно принять ключ с именем пользователя, с которым вы запускаете Hudson. Поэтому, если вы не запускаете Hudson с локальной системной учетной записью (что в любом случае является плохой идеей), вам необходимо войти в систему с учетной записью Hudson и принять ключ. Тогда ваша сборка Hudson будет работать.
Если Hudson работает с локальной системной учетной записью, возможно, есть вариант, но я не уверен, будет ли он работать или нет. Во-первых, вы должны разрешить сервису Hudson взаимодействовать с рабочим столом. Затем вы входите на свой сервер как администратор. Я не уверен, если вам нужно быть физически на коробке. Запустите Plink или PuTTY и надейтесь, что появится всплывающее окно, затем вы можете принять ключ, и все должно работать нормально.
Другой вариант - запустить Plink с помощью команды runas и указать свои (разные) учетные данные пользователя.
Другой вариант: получите Quest's Plink и используйте опцию -auto_store_key_in_cache
,
Как отметил Питер Шютце, вы должны принять ключ с именем пользователя, с которым вы запускаете Hudson. Мое решение для этого, просто используя стандартные putty и plink, заключается в следующем:
- Настройте сессию, используя необходимые данные соединения, с помощью putty и сохраните его
- подключиться один раз, принимая ключ
- С помощью regedit полностью экспортируйте [HKEY_CURRENT_USER \ Software \ SimonTatham]
- Замените "HKEY_CURRENT_USER" на "HKEY_USERS \ S-1-5-18", который является идентификатором безопасности для учетной записи локальной системы
- Сохраните файл .reg и импортируйте его, дважды щелкнув
Таким образом, теперь у вас есть принятый ключ хоста И все настройки для сеанса, доступные при выполнении соединений plink с локальной системной учетной записью.
Это особенно удобно, когда вы также устанавливаете файл с закрытым ключом, который не защищен паролем для этого сеанса.
PuTTY создает окно. Наверное, поэтому он зависает от Хадсона (у которого нет доступа к оконной системе). Плинк, наверное, лучшая ставка. Однако, с моей установкой PuTTY (0.60), параметры командной строки Plink полностью не работают. Я не мог войти на сервер, кроме как с моими настройками PuTTY по умолчанию.
Теоретически, вы можете установить сеанс PuTTY и использовать его с Plink (через -load
). Однако у вас будет проблема с тем, чтобы настроить настроенный сеанс на пользователя, с которым работает Hudson.
Мой любимый способ попасть в контекст другой машины - создать подчиненное устройство на целевой машине и запустить сценарии. Я использую это широко, чтобы обойти хранение незашифрованных паролей на жестких дисках. Посмотрите документацию Hudson о том, как это сделать.