Непрерывное развертывание с дженкинсами
Я хочу развернуть с jenkins в тестовую среду и в производственную среду. Для этого мне нужно подключиться к серверу требуемой среды, что-то вроде ssh/scp.
Я хотел бы знать, что лучший способ.
Я нашел некоторые плагины, чтобы сделать это, например, Jenkins-Deploy-Plug-in или Jenkins Publish over SSH Plugin. У первого есть много проблем, которые на самом деле не заслуживают доверия для развертывания в производстве, а для второго вам необходимо изменить глобальную конфигурацию, которая является ручной работой для каждого развертывания.
Есть идеи, как это решить? Может быть, с некоторыми скриптами или плагинами?
Единственная текущая идея, которую я имею, это: подключиться с jenkins к серверу (возможно, с помощью SSH Plugin) и выполнить там script, который подключается к желаемой среде. Но это две связи. Это действительно необходимо? Я надеюсь на более простой способ для этого.
спасибо за любой намек.
Ответы
Ответ 1
Я предлагаю следующую процедуру:
один единственный скрипт оболочки (хранящийся где-то на сервере jenkins) делает все. По сути, скрипт выполняет scp артефакта сборки, а затем подключается к серверу (ssh) и выполняет все необходимые для развертывания задачи (настройка страницы обслуживания, резервное копирование текущего приложения, развертывание нового приложения и т.д.).
На сервере jenkins есть как минимум 2 задания:
- первый просто выполняет сборку (используя maven или любой другой скрипт сборки)
- Второе задание выполняет развертывание: поэтому оно выполняет только сценарий оболочки. (Я предлагаю одно задание развертывания для каждой целевой среды: тестирование, производство,...)
Не требуется никакого "специального" плагина jenkins для реализации этого "развертывания одним щелчком". Требуется только, чтобы пользователь jenkins имел доступ по ssh к целевому серверу.
РЕДАКТИРОВАТЬ
Вот пример сценария оболочки для иллюстрации моего поста
#This script will copy the last artifact build by the job "MyApp" to test.myserver.com
#and remotely execute the deployment script.
#copy the war to the server
#(the job "MyApp" is using maven, that why the war can be found at this location)
scp -i <HOME_DIR>/.ssh/id_dsa $HUDSON_HOME/jobs/MyApp_Build/workspace/myapp/target/myapp.war [email protected]:/tmp/
#connect to the server and execute the deployment script
ssh -i <HOME_DIR>/.ssh/id_dsa [email protected]
#The following is just an example of what a deployment script can be.
#of course you must adapt it to your needs and environment
"cd <TOMCAT_DIR>;
#first copy the current war to a backup directory (additionaly, I have a cron task deleting old undeployed apps)
cp -rf myapp-apps/myapp* undeployed/myapp-apps/;
#execute a script (stored on the server) to properly stop the app
sh bin/myapp.sh stop;
#delete current app
rm -rf myapp-apps/myapp;
rm -rf myapp-apps/myapp.war;
#copy the uploaded war in tomcat app directory
cp /tmp/myapp.war myapp-apps/;
#execute a script (stored on the server) to start the app
sh bin/myapp.sh start"
Ответ 2
Использование SSH компрометирует безопасность вашей среды
и довольно сложно устранить неполадки.
Лучше установить Jenkins-Slave на удаленном компьютере
и выполните тесты там, выполнив задание на ведомом.
Ведомый контролируется сервером, что экономит вам массу проблем
управление соединением.
Вы можете запустить удаленное задание в конце успешной сборки
и передать ему артефакт этой сборки.
(также может иметь первое хранилище Job Store артефакты на общем диске
и передать местоположение этих артефактов в следующее задание).
Смотрите здесь:
Ответ 3
В идеале вы должны использовать что-то вроде Fabric или Capistrano для развертывания и вызывать эти сценарии у Дженкинса. Я использовал Capistrano для приложений Ruby On Rails и Non-Ruby. Самое большое преимущество, которое я вижу:
- Интеллект встроен для отката развертывания в случае наличия ошибок при развертывании.
- Крючки, которые он предоставляет для запуска набора сценариев, таких как миграция БД, перезагрузки службы и т.д.
- Ручной откат в случае необходимости.
Ответ 4
Привет кто-нибудь, у меня есть одна проблема признания вины
Как развернуть одно окружение в другой среде, такой как (DEV, UAT, Pre-PROD, PROD), используя jenkins?
- без платных инструментов IBM UCD, удеплой