1. локально развёрнута система в виртуалке Vagrant почти такая же как demo-сервер и prod-сервер.
2. весь код отправляется на bitbacket в репозиторий git в ветку dev
3. bamboo периодически проверяет состояние ветки dev (по хуку + таймаут) и через 15 минут от последнего комита запускает юнит-тесты
4. если тесты прошли, делает merge ветки dev -> в ветку demo. Конфликтов нет.
5. deployhq по хуку определяет, что изменилась ветка demo и запускает автоматическое обновление demo-сервера. Перед обновлением (* см. ниже) делается дамп базы, пользовательский интерфейс закрывается, крон-задачи и очереди тушатся (** см. ниже). После обновления делается дамп базы, интерфейс открывается, крон-задачи и очереди восстанавливаются, выполняется рестарт кэша.
6. с демо-сервера собираются метрики скорости и делаются селениум тесты
7. когда релиз, вручную мержим dev -> prod. Конфликтов нет.
8. deployhq по хуку определяет, что изменилась ветка prod и запускает автоматическое обновление прод-сервера. Перед обновлением делается дамп базы, пользовательский интерфейс закрывается, крон-задачи и очереди тушатся. После обновления делается дамп базы, интерфейс открывается, крон-задачи и очереди восстанавливаются, выполняется рестарт кэша.
9. если хотфиксы, то восстанавливаешь у себя базу с последнего дампа, берёшь код из prod, исправляешь, комитишь в prod, затем мержишь prod -> demo -> dev
* обновление - это что?
Обновление исходных кодов (PHP, Python, JS, SCSS), компиляция и сжатие CSS, сборка и сжатие JS, обновление зависимостей, установка обновлений на базу данных.
** зачем закрывать интерфейс, тушить крон и очереди?
В проекте много всяких вещей, которые не хранятся в репозитории, а именно: CSS собранные из SCSS, модульное приложение на AngularJS с кучей зависимостей, подмодули git, пакеты для PHP (composer) - они на bamboo, на demo, на prod собираются заново. Это занимает время. Чтобы не было сбоев, выключаем всё, кроме самой сборки. На машинах разработчиков все зависимости обновляются по мере необходимости, а на CSS и JS следит gulp.
Настройка всей этой кухни заняла 2 месяца. По другим проектам - неделю максимум.
Ссылки:
Bitbucket (git),
Vagrant (develop),
Bamboo (continuous integration),
Deployhq (continuous deployment).
Ну и чуть рекламы от спонсора ;)
Icons8 15 000+ free flat style icons
Наш стек технологий на
stackshare.io