Привожу пример выгрузки приложения на рельсах:
Оператор && запускает следующую конструкцию при условии успешного завершения предыдущей.
Все операции - это банальные, нам знакомые вызовы программ с различными ключами, человеко-читабельно.
Добавляю все изменения в систему контроля версий.
Отправляю созданный коммит в мастер ветку рабочего сервера.
Вывожу на экран обновляющийся в режиме реального времени журнал рабочего сервера.
Разумеется, этому может быть алиас или вызов короткой задачи с аргументами.
При необходимости, этот вызов можно укоротить - сам bash, в котором невылазно, этому способствует.
Вывод результатов лаконично и однозначно, простым человеческим языком, рассказывает, что произошло и что происходит сейчас, с указанием временных отметок.
Из лога вырезаны логи гита и сборки зависимостей, строки пользовательских запросов и ответов сервера.
Хронология деплоя для всех посетителей рабочей версии следующая:
в 46:58 остановка всех процессов
в 47:04 стартует пума
в 47:07 пума готова отвечать посетителям
Лёгкий даунтайм.
Для разработчика хронология следующая:
в 46:15 нажал на кнопку
повтыкал в вывод до 47:07 и понял что все опять хорошо.
Дикий даунтайм, адский труд.
В этой версии нет миграций в базу данных, нет запуска тестов, и прочих задач, отсутствует предварительная проверка на промежуточных стендах.
Автоматизация тестирования понижает вероятность сбоев.
Так-же можно автоматизировать миграции и задачи.
Но суть не меняется - это всего-лишь одна команда с аргументами.
Цель - автоматизация безопасной развертки приложения.
Дабы время тратить только на творчество)
Это были рельсы.
Так можно на стендах общаться с заказчиками и деплоить в рабочие ветки.
Как вы это делаете с Дру?
...
[master 776f311] refact and assets
12 files changed, 46 insertions(+), 46 deletions(-)
...
Counting objects: 38, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (23/23), done.
Writing objects: 100% (23/23), 81.16 KiB | 0 bytes/s, done.
Total 23 (delta 17), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
...
remote: Bundle completed (0.68s)
remote: Cleaning up the bundler cache.
remote: Detected manifest file, assuming assets were compiled locally
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote: Default types for Ruby -> console, rake, worker
remote:
remote: -----> Compressing... done, 44.4MB
remote: -----> Launching... done, v60
remote: https://proj_name.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/proj_name.git
56baf55..776f311 master -> master
2015-09-25T12:46:55.279951+00:00 heroku[api]: Deploy 776f311 by multpix@gmail.com
2015-09-25T12:46:55.279951+00:00 heroku[api]: Release v60 created by multpix@gmail.com
2015-09-25T12:46:55.342913+00:00 heroku[slug-compiler]: Slug compilation started
2015-09-25T12:46:55.343026+00:00 heroku[slug-compiler]: Slug compilation finished
2015-09-25T12:46:55.375245+00:00 heroku[web.1]: State changed from up to starting
2015-09-25T12:46:58.357046+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2015-09-25T12:46:59.166310+00:00 app[web.1]: [3] - Gracefully shutting down workers...
2015-09-25T12:46:59.329705+00:00 app[web.1]: [3] === puma shutdown: 2015-09-25 12:46:59 +0000 ===
2015-09-25T12:46:59.329715+00:00 app[web.1]: [3] - Goodbye!
2015-09-25T12:47:00.400733+00:00 heroku[web.1]: Process exited with status 0
2015-09-25T12:47:00.580818+00:00 heroku[web.1]: Starting process with command `bundle exec puma -C config/puma.rb`
2015-09-25T12:47:04.170889+00:00 app[web.1]: [3] Puma starting in cluster mode...
2015-09-25T12:47:04.171005+00:00 app[web.1]: [3] * Version 2.14.0 (ruby 2.2.3-p173), codename: Fuchsia Friday
2015-09-25T12:47:04.171041+00:00 app[web.1]: [3] * Min threads: 1, max threads: 1
2015-09-25T12:47:04.171078+00:00 app[web.1]: [3] * Environment: production
2015-09-25T12:47:04.171112+00:00 app[web.1]: [3] * Process workers: 2
2015-09-25T12:47:04.171150+00:00 app[web.1]: [3] * Preloading application
2015-09-25T12:47:07.753404+00:00 app[web.1]: [3] * Listening on tcp://0.0.0.0:54013
2015-09-25T12:47:07.883774+00:00 app[web.1]: [3] - Worker 0 (pid: 6) booted, phase: 0
2015-09-25T12:47:07.753654+00:00 app[web.1]: [3] Use Ctrl-C to stop
2015-09-25T12:47:07.886928+00:00 app[web.1]: [3] - Worker 1 (pid: 16) booted, phase: 0
2015-09-25T12:47:08.198934+00:00 heroku[web.1]: State changed from starting to up
p.s.
Очень интересует мнение всех - от суровых друппалургов до не менее суровых джангистов-тяжеловесов.
Но, т.к. сегодня пятница, то особенно интересует мнение отчаянных ковбоев виндорезов.
Комментарии
Спросим проще, как грузитесь то?
Ручками, батенька, по старинке. Тёмные мы.
Ну только при вёрстке gulp по мелочи,
Я две комнады в консоли пишу - и у меня создается папка для поддомена, качается туда друпал, создается БД с пользователем, релоадидся nginx и ставится друпал.