Главный вопрос: является ли развертывание с использованием Git на производственных серверах хорошей стратегией?
Многие, многие стратегии развертывания, которые я вижу, вращаются вокруг наличия Git на ваших серверах (разработка, подготовка и производство).
Преимущества этого кажутся очевидными для развертывания на стадии / производстве:
Однако я вижу в этом некоторые недостатки:
git pull
на производственном сервере может выйти из строя, если есть какие-то неустановленные изменения в производстве (также можно преодолеть с помощью -f)Компании по развертыванию в качестве услуги (например, Beanstalkapp.com, deployhq.com) используют FTP, SFTP или SSH. Beanstalkapp, в частности, хорош только для изменения файлов на основе истории git (вместо повторного развертывания каждого файла). Эти службы не запрашивают, чтобы у вас был git на ваших сценических / производственных серверах (хотя, если вы развертываете через SSH, возможно, вы использовали бы / могли бы использовать эту стратегию).
Я обнаружил, что мне нравится использовать sftp:
Стоит ли простота использования git на производственном сервере с точки зрения лучших практик и безопасности? Если нет, то как лучше всего выполнить развертывание без использования инструментов непрерывной интеграции?
(Я спрашиваю только о том, чтобы пропустить инструменты CI, поскольку временные / бюджетные / клиентские ограничения не позволяют мне использовать их в повседневной жизни).
Отвечая на ваш вопрос: Да, развертывание с использованием git (или любого другого элемента управления версиями) - это правильный путь, особенно когда ваша инфраструктура начинает становиться сложной / большой.
Отвечая на ваши вопросы
Безопасность должна быть многоуровневой, и даже если бы git был действительно опасным вектором атаки, кому-то все равно пришлось бы получить доступ к серверам для этого. Имейте хорошую безопасность сервера, аутентификацию на основе ключа SSH и контроль доступа / ведение журнала, и у вас будет очень низкий риск.
Если вы хотите написать инструмент развертывания, конечно, вы должны рассмотреть процедуру отката в случае сбоя обновления кода. Хорошо то, что такие инструменты, как capistrano (с которыми я более знаком), уже имеют все эти встроенные шаги, и вы можете изменить поведение и т. Д.
Я думаю, что лучше всего использовать инструмент развертывания, например капистрано или Влад Развертыватель или даже Chef развертывает если у вас уже есть Chef (или другой инструмент управления конфигурацией).
Capistrano, например, по умолчанию ориентирован на рельсы, но вы можете адаптировать его для развертывания чего угодно. Он будет подключаться к вашим серверам, обновлять код (сохраняя некоторые старые версии на случай, если вам нужно откатиться к предыдущей версии), выполнять такие задачи, как миграция или очистка БД, а затем при необходимости перезапускать службы. Вы можете адаптировать это для своей среды и даже иметь разные среды (я работал с производством, заявив + 3 других).
Все остальные инструменты позволят вам сделать что-то подобное, и я думаю, что тратить время на написание сценария развертывания допустимо, только если ваша система действительно отличается от «обычных».