Кэширование composer-репозиториев

Мой проект (МП) использует много кода который писали внешние разработчики. Этот код надежен и протестирован. Им пользуется большое количество людей. Он стабилен. Этот код постоянно изменяется и тербует обновления, потому что исправляются баги и делаются фичи.

Для того что бы рационально управлять внешними зависимостями мы используем composer и храним код в нашем репозитории.

Проблемы

  1. В код вендоров вносятся наши изменения. Это недопустимо, тк внешние разработчики об этом не знают и рушится целостность. При обновлении появляются конфликты, которые надо решать нашим разработчикам.
  2. Внешние репозитории не гарантируют доступности. Часто бывало что нет доступа, либо скорость "крайне мала". Это недопустимо для быстрого CI

Не смотря на это, есть смысл в том, чтобы вынести внешние зависимости из репозитория МП.

  • Это обеспечит стабильность внешних репозиториев, так как они будут использоваться регулярно всеми разработчиками и при сборке релиза.
  • Это сократит зависимость от github и packagist (внешние сервисы которые мы не контролируем и никак не можем гарантировать их доступность).

Решено использовать паттерн cache proxy.

Мы берем все наши зависимости, загружаем их на наш сервис и обновляем когда надо. МП использует только наш сервис.

Решение

На отдельном сервере поднимаем satis. В него прописываем packagist.com как основной репозиторий, дополнительные, если надо. В require прописываем все зависимости МП. И требуем загрузку зависимостей.

ssh://hg@proxy.yapro.ru/special/jetkit/satis/proxy

Файл config.json

{
"name": "Proxy/Satis",
"homepage": "http://proxy.satis.yapro.ru/",
"repositories": [
    {
        "type": "git",
        "url": "https://github.com/nrk/predis/"
    }
    ...
    { "type": "composer", "url": "https://packagist.org" }
],
"archive": {
    "directory": "dist"
},
"require": {
    "symfony/config": "2.5.5"
    ...
},
"require-dependencies": true
}

Для добавления зависимостей надо дописать их в require и запушить, а cron обновит все пакеты раз в минуту

В МП в composer.json в раздел repositories надо ввести адрес нашего satis и запретит packagist

composer.json

{
    "repositories": [
        {"type": "composer", "url": "http://proxy.satis.yapro.ru"},
        {"packagist": false}
    ]
}

Удачки.

Оцени публикацию:
  • 1,5
Оценили человек: 1

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2017 YaPro.Ru

Главная » Веб-мастеру » PHP »