Изолирующий пакет symfony, чтобы каждая команда могла работать в отдельном пакете

У меня есть огромный api, написанный на symfony3 с несколькими пакетами (все пакеты включены в один и тот же репозиторий git), у нас есть несколько команд, каждая из которых работает над своим собственным пакетом, моя проблема: у нас есть одна ветка по env, поэтому, если разработчик работать над веткой dev, хотя все другие команды используют ту же ветку, он не может интегрировать свой собственный код в ветку prod, потому что все другие изменения, сделанные другими, также могут быть введены в prod, и это очень сложная ситуация для управления. Итак, как разделить мое приложение, чтобы каждая команда могла фиксировать / продвигать свою собственную работу в ветке env без такой сложной процедуры? Какую архитектуру лучше всего использовать в этом случае, как изолировать каждый пакет другим с помощью symfony? Или что вам нужно сделать, если вы уже испытали то же самое? Зная, что моя платформа DevOps основана на wercker CI, она создает одно большое докер для изображений со всеми пакетами Symfony и развертывает его на Amazon ecs.

Вы ищете рабочий процесс функциональной ветки? Понятия не имею, ваш вопрос не имеет смысла. И состояние, в котором он сейчас находится, слишком широкое для SO.

Alex Karshin 09.07.2018 17:52

Хорошо, мистер Алекс, чтобы задать вопрос другим способом, который может вас заинтересовать, если вы испытываете то же самое, какова лучшая архитектура, рабочий процесс веток, решение для развертывания, которое следует использовать, чтобы ваши команды могли вводить свои PR и легко внедрять их изменения.

Mohamed 09.07.2018 18:05

Описанный здесь сценарий довольно распространен: вы не разделите код только потому, что, возможно, вы получите меньше конфликтов во время слияния. Вы разделяете код из-за многих вещей (разделение, микросервисы, "SRP" и так далее ...) ИМХО, каждый разработчик должен переустанавливать свою ветку несколько раз в день (если у вас частая интеграция в исходной ветке), чтобы избежать кошмара слияния . Конфликты являются частью этого процесса, и вы не сможете их избежать, даже если разделите код на одну строку для каждого репозитория git.

DonCallisto 10.07.2018 08:51

Я ищу не решение, позволяющее избежать конфликтов, а решение изолировать пакет symfony в отдельных репозиториях git. Во избежание слияния работы других команд. Иногда только одна команда должна вносить свои изменения в производство, проблема здесь в том, что они должны перебазировать, чтобы избежать нескольких десятков коммитов (это одно репо, все остальные команды совершают в той же ветке разработки), а в некоторых ситуациях это вообще невозможно Итак, что делать, чтобы упростить этот процесс.

Mohamed 10.07.2018 11:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
4
160
4

Ответы 4

Вы можете использовать подмодули или разделить свое приложение с помощью подмодулей git или с использованием структуры композитора, это означает, что весь ваш пакет должен потребоваться композитору при создании приложения в вашем CI, и поэтому вы можете свободно продолжать свои DevOps

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

Mohamed 09.07.2018 18:21

Я рекомендую использовать микросервисную архитектуру, каждый пакет должен быть отдельным проектом, поэтому ваши команды могут размещать свой код в отдельном репозитории git, нет необходимости иметь один большой проект, в котором все вносят свои изменения в одну и ту же ветвь разработки, что означает, что каждый PR может содержать изменения всех остальных разработчиков. Микросервисы могут быть решением, это очень дорого в установке в качестве архитектуры, но я думаю, что это лучшее решение для таких проектов.

Я думаю, что это очень дорогая в реализации архитектура, которая представляет для меня революцию, у меня нет на это времени и ресурсов. Спасибо :)

Mohamed 09.07.2018 19:27

Предыдущее решение для микросервисов, которое было предоставлено @ imane-bahiaoui, кажется хорошим выбором, особенно с новой версией symfony 4, которая идеально подходит для микросервисов. Но принимая во внимание ваш комментарий, я рекомендую разделить ваш проект на несколько репозиториев git и использовать composer для объединения всего этого, как если бы это был один проект во время процесса сборки на вашем сервере CI или в локальной среде, вы должны обратить внимание на семантическое управление версиями ваши связки.

Примером этого является файл composer.json с исходным кодом фреймворка Laravel:

https://github.com/laravel/framework/blob/5.6/composer.json

"replace": {
    "illuminate/auth": "self.version",
    "illuminate/broadcasting": "self.version",
    "illuminate/bus": "self.version",
    "illuminate/cache": "self.version",
    "illuminate/config": "self.version",
    "illuminate/console": "self.version",

Вы можете привести мне реальный пример?

Mohamed 10.07.2018 13:30

вы можете взглянуть на некоторые современные фреймворки composer.json, такие как фреймворк laravel: github.com/laravel/framework/blob/5.6/composer.json, взгляните на раздел replace

yoeunes 10.07.2018 13:35

Если вы не можете разделить код в разных подпроектах / пакетах, которые будут поддерживаться в их собственном репозитории и отдельно требуются композитору, самый простой и чистый способ справиться с большими командами, работающими с большими функциями, - использовать git flow.

По сути, он использует отдельную ветку для каждой новой функции, созданную и в конечном итоге объединенную обратно в общую ветку разработки, когда функция готова для постановки / тестирования.

Вы можете увидеть здесь хороший обзор

https://datasift.github.io/gitflow/IntroductionGitFlow.html

Вы не получите разделения кода, но если вы сохраняете четко определенные функции и имеете твердую архитектуру, слияние должно полностью контролироваться.

Дополнительным преимуществом является то, что поток поддерживается многими инструментами.

Это именно то, что я использую сейчас, но это все еще недостаточное решение, почему? Все завершенные функции находятся вместе в одной ветке. Предполагая, что коммерческая команда хочет внедрить функцию X в prod, на данный момент у нас есть 15 завершенных новых функций в dev env, это означает, что нам нужно искать ветку X в истории git, чтобы внедрить ее в prod env, это далеко не так просто в реальности. Поскольку в некоторые другие ветки в prod может быть передано больше недавних, поэтому для внедрения X вы должны управлять очень сложным процессом перебазирования. Моя тюрьма состоит в том, чтобы максимально упростить этот процесс.

Mohamed 11.07.2018 13:18

gitflow уже предлагает решение для этого. Только ветви функций, запланированные для следующего выпуска, должны быть объединены в основную ветвь разработки. Проверьте 3-ю диаграмму по ссылке

Dimitris 11.07.2018 13:29

И если вы действительно не доверяете своим командам, что они не делают глупостей, возможно, вы могли бы использовать ветвления функций fork и pull request. Это также может хорошо интегрироваться с вашим CI (как в pull, только если тесты пройдены и т. д.)

Dimitris 11.07.2018 14:00

Другие вопросы по теме