У меня есть проект PHP, в котором я загружаю пакеты через Composer. Я также запускаю Continuous Integration с использованием Jenkins на специализированном сервере CI. Каждый час Jenkins запрашивает мой репозиторий для изменений и, если он присутствует, выполняет тестовый прогон.
Первый шаг testrun делает новую проверку репозитория и выполняет сборку приложения с использованием Phing. Один из шагов сборки выполняет
composer install
Поскольку Jenkins всегда работает со свежей проверкой, композитор всегда будет получать все пакеты на каждом тестовом прогоне, даже если ни один из пакетов не был изменен со времени предыдущего запуска. Это имеет несколько недостатков:
- Для завершения тестового прогона требуется релятивно долгое время (композитор должен получить, например, Zend Framework, который довольно большой
- Он накладывает ненужную нагрузку на сервер packagist, если новые пакеты выбираются каждый час
- Если по какой-то причине установка композитора завершается с ошибкой, значит, мой тестовый прогон.
Я думал о возможности хранения пакетов, которые композитор извлекает на центральном месте на сервере CI, поэтому Дженкинс сможет получить доступ к пакетам в этом месте для каждого тестового прогона. Конечно, теперь мне нужно переписать часть моего приложения, чтобы обработать тот факт, что папка поставщика находится в другом месте на сервере CI. Во-вторых, я должен сказать Дженкинсу отслеживать изменения в файле composer.lock, чтобы посмотреть, нужно ли ему вообще запускать композитор. Я боюсь, что ни одна из этих двух вещей не является тривиальной.
Есть ли у кого-нибудь какие-либо предложения по другому/более эффективному способу сделать это, или это лучший вариант просто получить все пакеты через композитор при каждом прогоне. Кроме того, это лучший способ убедиться, что вы всегда используете правильные пакеты, но это сортировка кажется пустой тратой банды, безусловно, на более поздних стадиях разработки, когда список пакетов вряд ли изменится.