Для развертывания наших веб-приложений мы используем Bitbucket Pipelines в качестве нашей платформы CI / CD. Здесь мы используем самоконтролируемый контейнер Docker для запуска наших сборок и тестов перед отправкой приложения. Сборка означает, что мы используем composer и npm, чтобы создать проект для отгрузки, в дальнейшем мы можем использовать любые другие потребности из-за использования Docker, что приятно. Для развертывания / отправки мы использовали Rsync на последнем шаге нашего конвейера с файлом фильтра развертывания.
- rsync -chrtuv --filter="merge ./.deployfilter" ./ $PROD_USER@$PROD_HOST:$PROD_PATH
Пример фильтров:
- /logs/***
- ***.gitkeep
- .git/***
P /config/***
+ /vendor/***
+ /public_html/***
+ /***
Рядом с этой стратегией развертывания мы используем Gitflow для нашей стратегии Git Flow. При этом мы развернем ветку master
, которая объединена с исправлениями или выпусками и помечена для производства. Наши release
филиалы развернуты в нашей среде QA, а feature
- в нашей локальной тестовой среде.
Некоторые проблемы, с которыми мы сталкиваемся при этой стратегии (особенно в старых проектах):
- Rsync, синхронизирует все файлы с производством вместо различий между коммитами, например, из-за того, что нет простого способа сравнения файлов в конвейерах
- Развертывание удаляет папку загрузки, используемую CMS, например
- Развертывание удаляет другие связанные файлы в месте назначения, неправильно настроив фильтр развертывания
- Не очень хороший обзор того, что будет развернуто и что развернуто
- Нет (не часто) гибких откатов
- Из-за конфликтов слияния или поврежденного проверенного кода производство может быть повреждено
- Трудно поддерживать фильтр развертывания
Что мы в конечном итоге хотим достичь с помощью нашей стратегии развертывания, так это:
- Понимание развернутых файлов и готовящихся к развертыванию файлов, + и -
файлы
- Минимальное время простоя при развертывании проекта
- Минимальное время загрузки развертываемых файлов
- Простой способ отката развертываний
- Короче говоря, больше доверия к развертыванию наших приложений.
Какие есть еще лучшие практики, помимо того, что мы уже делаем, чтобы сделать эту стратегию лучше, или она сводится просто к удалению человеческих ошибок, таких как лучшая настройка фильтра развертывания или практики git? Кроме того, мне любопытно, как другие webdevs справляются со своей стратегией развертывания.
Кроме того, я исследовал некоторые другие вопросы, и на самом деле ничто не отвечает на все мои вопросы. Если вы думаете, что есть такой, я бы с удовольствием посмотрел.
Спасибо.