Continuous Deployment to Windows Instance

в 12:45, , рубрики: continuous deployment, freesshd, Jenkins, windows, Блог компании EPAM Systems, метки: , , ,

Что такое Continuous Delivery многие уже, наверное, слышали неоднократно. Одним из ключевых моментов этого процесса является постороение Build Pipeline («трубопровод» от исполнителя к заказчику). А для этого нужно автоматизировать такие процессы как сборка проекта, его разворачивание на инфраструктуре, тестирование и т.д. Отличным инструментом для таких задач является Jenkins. Continuous Deployment to Windows Instance

Для автоматизации разворачивания приложения простейшим вариантом может быть запуск скриптов Jenkins-ом на хостах инфраструктуры по ssh. А что, если в парк из Linux-инстансов затесался один (или несколько) с Windows? Как деплоить на «вражеский» хост — смотри под катом.

Чтобы деплоить на Windows так же, как и на Linux (ну почти), нужно установить FreeSSHd и запустить его как сервис. Далее его нужно настроить через «freeSSHd settings» окно (вызвается из системного трея). Все настройки/фичи описывать не буду, только основные, те, что нам понадобятся для удалённого выполнения команд. На вкладке «Users» добавляем пользователя «jenkins» и выставляем следующие настройки:
Continuous Deployment to Windows Instance

На вкладке «SSH»:
Continuous Deployment to Windows Instance

А на вкладке «Authentication» нужно указать путь, где будут храниться публичные ключи:
Continuous Deployment to Windows Instance

Хост для деплоя готов!

Теперь нужно на 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js