Запуск пакетных скриптов на удаленном сервере (windows) от jenkins
У меня есть сервер непрерывной интеграции (Jenkins), который строит мой код (проверяет ошибки компиляции) и запускает тесты, а затем разворачивает файлы на удаленный сервер (не военный файл, а фактическую структуру файла). это с плагином Jenkins, который позволяет мне передавать файлы через samba, он делает это в ночное время.
Теперь мне нужно выполнить команду ant на удаленном сервере. И после этого мне нужно запустить сервер приложений на удаленном сервере, сервер приложений запускается путем запуска .bat файла из командной строки.
Я довольно не знаю, как это сделать, я знаю, что Дженкинс способен запускать командные команды, но как заставить их работать в контексте сервера, а не в контексте сервера сборки?
Ответы
Ответ 1
Если Jenkins в Windows, удаленный на * nix, используйте plink.exe
(который по существу является командной строкой PuTTy
)
Если Jenkins в Windows, удаленный в окне, используйте psexec.exe
Если Jenkins on * nix, remote on * nix, используйте ssh
Если Jenkins на * nix, удаленный в Windows, (обновление 2015-01) Ansible http://docs.ansible.com/intro_windows.html имеет поддержку для вызова команд Windows, например powershell, из unix/linux, https://github.com/ansible/ansible-examples/blob/master/windows/run-powershell.yml
Расскажите, какие операционные системы задействованы (как на Jenkins, так и на пульте дистанционного управления), и я буду прокручивать их дальше.
Edit:
На странице загрузки psexec.exe
перечислены все параметры командной строки. Вам понадобится что-то по строкам:
psexec \\remotecomputername -u remoteusername -p remotepassword cmd /c <your commands here>
Замените <your commands here>
фактическими командами, как вы их выполнили в командной строке.
Обратите внимание, что psexec
сначала необходимо установить службу и потребовать, чтобы это было сделано с помощью привилегированной командной строки /admin для удаленных учетных данных.
Кроме того, вам нужно запустить psexec -accepteula
один раз, чтобы принять приглашение EULA.
Ответ 2
Следуя славянскому ответу выше, вот более простое решение для Дженкинса (* nix) для удаленных (windows):
- Установите SSH-сервер на свои удаленные окна (домашняя версия MobaSSH хорошо работает для меня)
- Убедитесь, что ваш пользователь Jenkins на вашей машине Jenkins имеет требуемую сертификацию для открытия SSH-соединения с вашим пультом (вы можете просто открыть терминал и ssh на свой удаленный компьютер один раз, а затем принять сертификат. Убедитесь, что он сохранен для пользователя Jenkins).
- Теперь вы можете добавить фазу сборки оболочки выполнения в задание Jenkins, которое может использовать SSH на вашем удаленном компьютере Windows.
Примечания:
- Установленное соединение может потребовать дополнительной работы - вам может потребоваться установить переменные среды Windows или сопоставить сетевые драйверы, чтобы ваши исполняемые команды или командные файлы работали корректно на ваших машинах Windows.
- Если вы хотите запускать связанные с графическим интерфейсом операции, это решение может быть нецелесообразным (после моей работы по запуску тестов автоматизации, требующих манипулирования графическим интерфейсом).
- Использование Jenkins SSH-плагина является проблемой, как показано здесь.
Ответ 3
В конце концов я столкнулся с другим подходом после попытки psexec.exe некоторое время.
Psexec.exe и копирование файлов по сети были немного медленными и неустойчивыми, тем более что в домене, в котором я работаю, есть политика смены пароля каждый месяц (что нарушило сборку).
В конце я пошел с подходом master/slave, который быстрее и стабильнее. Поскольку мне не нужно использовать psexec.exe и не нужно копировать файлы по сети.