Я пытаюсь использовать PuTTY на командной строке от Гудзонского задания.
Команда является следующей:
putty -ssh -2 -P 22 USERNAME@SERVER_ADDR -pw PASS -m command.txt
Где 'command.txt' является сценарием оболочки для выполнения в сервере через SSH.
Если я запускаю эту команду от командной строки Windows, она работает. Сценарий оболочки выполняется на машине сервера.
Если я запускаю сборку Гудзонского задания, настроенного с этой пакетной командой, оно не работает. Сборка работает... и работает... и работает.. ничего не делая, и я должен остановить его вручную.
Действительно ли возможно запустить внешнюю программу (то есть, PuTTY) от Гудзонского задания?
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.txt" на сервере, и ничто не сделано.
Проблема, что необходимо принять ключ с именем пользователя, с которым Вы выполняете Гудзон. Таким образом в случае, если Вы не выполняете Гудзон с локальной системной учетной записью (который является плохой идеей так или иначе), необходимо войти в систему с Гудзоном, считают и принимают ключ. Затем Ваша Гудзонская сборка будет работать.
Если Гудзон работает с локальной системной учетной записью могла бы быть опция, но я не уверен, будет ли он работать или нет. Во-первых, необходимо позволить Гудзонскому сервису взаимодействовать с рабочим столом. Затем Вы входите в свой сервер как администратор. Я не уверен, физически ли необходимо быть на поле. Звон запуска или PuTTY и надежда, что всплывающее окно появится, затем можно принять ключ, и все должно хорошо работать.
Другая опция состояла бы в том, чтобы запустить Звон с командой рун и предоставить Ваши (различные) удостоверения пользователя.
Другая опция: получите Звон Quest и используйте опцию -auto_store_key_in_cache
.
PuTTY создает окно. Это, вероятно, почему это зависает для Гудзона (который не имеет доступа к системе управления окнами). Звон является, вероятно, лучшей ставкой. Однако с моей установкой PuTTY (0.60), параметры командной строки Звона полностью повреждаются. Я не мог войти в сервер кроме с моими значениями по умолчанию PuTTY.
В теории Вы могли настроить сессию PuTTY и использование это со Звоном (через -load
). Однако у Вас будет проблема получения Вашей настроенной сессии в любого пользователя Hudson, работает как.
Мой любимый способ войти в контекст другой машины состоит в том, чтобы создать ведомое устройство на целевой машине и запустить скрипты. Я использую это экстенсивно для обхождения паролей хранения, незашифрованных на жестких дисках. Взгляните на гудзонскую документацию относительно того, как сделать это.