Двухэтапная сборка и развертывание приложения Symfony

Мы используем Atlassian Bamboo для развертывания наших веб-приложений на тестовых и производственных серверах. Это двухэтапный процесс.

  • собрать и протестировать релиз
  • развернуть релиз в среде

Это работает относительно стабильно, но мы сталкиваемся с некоторыми проблемами с проектами Symfony 2.

Шаг 1 просто проверяет самую последнюю версию приложения из Git, выполняет некоторые тесты и другие задачи, включая composer:install. Последний будет выполнять некоторые сценарии (после установки): buildBootstrap, clearCache, installAssets, installRequirementsFile и removeSymfonyStandardFiles.

Этот шаг выполняется на сервере сборки. Поскольку файл parameters.yml отсутствует в Git, установка композитора не выполняется. Если мы сделаем composer install --no-scripts, сборка завершится успешно, поскольку эти сценарии никогда не вызываются.

Шаг 2 - отправить файлы на рабочий сервер, установить parameters.yml (который копируется из заранее определенного места на целевом сервере), выполнить app/console cache:clear и app/console assets:install. Релиз выглядит нормально на целевом сервере, но сценарии buildBootstrap, installRequirementsFile и removeSymfonyStandardFiles или их эквиваленты не запущены. Каковы последствия этого? Существуют ли для них какие-либо альтернативы приложения / консоли (при запуске app/console ничего не отображается)?

Или мы просто делаем это неправильно? Мы хотим, чтобы сервер сборки выполнял столько же работы, так как целевые серверы часто ограничены в возможностях (например, общий хостинг).


person Tom Cannaerts    schedule 12.09.2014    source источник
comment
У вас на производственной машине есть файл app / bootstrap.php.cache? Обычно он генерируется buildBootstrap, и без него время запуска значительно увеличится. Вы можете запустить сценарий из командной строки. По сути, просто скопируйте его из composer.json.   -  person Cerad    schedule 12.09.2014
comment
Мы изменили наш рабочий процесс, так что мы выполняем composer install --no-scripts на сервере сборки и composer install на целевом сервере, который не делает ничего, кроме выполнения сценариев (включая bootstrap.cache), поскольку карта поставщиков уже обновлена).   -  person Tom Cannaerts    schedule 19.09.2014


Ответы (1)


Строить

  • оформить заказ из git
  • копировать параметры для тестовых целей
  • сделать установку композитора (не обновление)
  • запустить phpunit для тестирования (используя PHPUnit как тип задачи)

После проверки, если все в порядке, будет создан артефакт, поэтому добавьте несколько задач для удаления всех библиотек:

  • rm -rf vendor
  • rm -rf app/cache

На этом сборка заканчивается.

Развертывать

  • Скачать артефакт
  • Я развертываю с помощью Capistrano / Capifony, поэтому запускаю его здесь.

По вашему вопросу о скриптах композитора не беспокойтесь, если они не работают, вам это не нужно, если список поставщиков не меняется. Я советую в любом случае иметь небольшой артефакт, который не включает библиотеки, и устанавливать библиотеки с помощью композитора. Если вы хотите выполнить тяжелую работу на сервере развертывания (а не на производстве), вы можете настроить Capifony с помощью set deploy_via, :copy.

person skler    schedule 12.09.2014
comment
Зачем вам удалять папку vendor перед созданием артефакта и как эти пакеты затем устанавливаются на ваш сервер, если они не поставляются с артефактом? - person Sven; 12.09.2014
comment
небольшие артефакты позволяют мне хранить больше сборок, я снова запускаю composer install с capifony. Мой совет - иметь хорошую систему развертывания, которая хорошо работает без бамбука. Bamboo очень полезен для проверки кода (с помощью phpunit) и сохранения сборок в случае отката. - person skler; 13.09.2014
comment
Мы сознательно хотим, чтобы в артефактах присутствовали поставщики, поскольку это в основном дает нам полный набор файлов для передачи на удаленный сервер. Идея выпуска (imho) состоит в том, чтобы иметь в наличии все файлы, которые вам нужны для использования кода (в нашем случае за исключением файлов конфигурации). - person Tom Cannaerts; 19.09.2014