Что такое Continuous Delivery многие уже, наверное, слышали неоднократно. Одним из ключевых моментов этого процесса является постороение Build Pipeline («трубопровод» от исполнителя к заказчику). А для этого нужно автоматизировать такие процессы как сборка проекта, его разворачивание на инфраструктуре, тестирование и т.д. Отличным инструментом для таких задач является Jenkins.
Для автоматизации разворачивания приложения простейшим вариантом может быть запуск скриптов Jenkins-ом на хостах инфраструктуры по ssh. А что, если в парк из Linux-инстансов затесался один (или несколько) с Windows? Как деплоить на «вражеский» хост — смотри под катом.
Чтобы деплоить на Windows так же, как и на Linux (ну почти), нужно установить FreeSSHd и запустить его как сервис. Далее его нужно настроить через «freeSSHd settings» окно (вызвается из системного трея). Все настройки/фичи описывать не буду, только основные, те, что нам понадобятся для удалённого выполнения команд. На вкладке «Users» добавляем пользователя «jenkins» и выставляем следующие настройки:
На вкладке «SSH»:
А на вкладке «Authentication» нужно указать путь, где будут храниться публичные ключи:
Хост для деплоя готов!
Теперь нужно на Jenkins-хосте сгенерировать пару ключей и публичную часть ключа положить в директорию на Windows инстансе, указанную в настройках freeSSHd.
Проверим, все ли мы правильно настроили (на Jenkins):
# su jenkins -
$ ssh jenkins@10.1.1.160 'cmd /c dir'
Если получили список файлов, значит все ОК.
Переходим непосредственно к деплою. Создадим новый job в Jenkins (кликнуть на «New Job»). Затем зададим имя и выберем «Build a free-style software project». В открывшейся странице редактирования в секции «Build» кликаем на «Add build step» и выбираем «Execute shell».
Сюда мы напишем bash-скрипт, который будет забирать артефакты (в нашем случае из git-репозитория), копировать их с Jenkins-хоста на Windows-инстанс и запускать cmd-скрипты на нём:
#!/bin/bash -x
REPO=/path/to/local/repo/
cd $REPO
git checkout
git pull origin master
#copy files:
lftp -u jenkins,pl sftp://10.1.1.160 <<EOF
mirror -R ./
bye
EOF
#start daemons:
ssh jenkins@10.1.1.160 'cmd /c cd DIRECTORY && script.cmd'
Тут все просто: скрипт скачивает артефакты, копирует их на Windows-инстанс, запускает необходимые cmd-скрипты.
После всех этих действий у нас есть job, который при нажатии на «Build Now» будет разворачивать приложение.
Спасибо за внимание! Удачных деплоев!
Автор: morkot