symfony隔离包允许每个团队在其单独的包中工作

symfony隔离包允许每个团队在其单独的包中工作,symfony,github,devops,software-design,software-distribution,Symfony,Github,Devops,Software Design,Software Distribution,我用symfony3编写了一个巨大的api,其中包含多个捆绑包(所有捆绑包都包含在同一个git repo中),我们有多个团队为各自的捆绑包工作,我的问题是:我们有一个由env提供的分支,如果一个开发人员在dev分支上工作,尽管所有其他团队都使用同一个分支,但他不能将自己的代码集成到prod分支上,因为其他人所做的所有其他更改也可能被注入到prod上,这是非常复杂的情况。 那么,如何拆分我的应用程序,使每个团队都能够在branch env上提交/推动自己的工作,而无需如此复杂的过程? 在这种情况下

我用symfony3编写了一个巨大的api,其中包含多个捆绑包(所有捆绑包都包含在同一个git repo中),我们有多个团队为各自的捆绑包工作,我的问题是:我们有一个由env提供的分支,如果一个开发人员在dev分支上工作,尽管所有其他团队都使用同一个分支,但他不能将自己的代码集成到prod分支上,因为其他人所做的所有其他更改也可能被注入到prod上,这是非常复杂的情况。 那么,如何拆分我的应用程序,使每个团队都能够在branch env上提交/推动自己的工作,而无需如此复杂的过程?
在这种情况下,最佳的体系结构是什么?如何使用symfony将每个捆绑包与其他捆绑包隔离?如果你已经经历过同样的事情,你会得到什么?知道我的devops平台基于wercker CI,它会用所有symfony捆绑包构建一个大图像docker,并将其部署到amazon ecs。

您可以使用子模块,或者使用git子模块拆分应用程序,或者使用composer结构,这意味着composer在您的CI中构建应用程序时必须使用所有捆绑包,因此,您可以流畅地继续您的devops

我建议使用microservice体系结构,每个捆绑包都必须是单独的项目,这样您的团队就可以将他们的代码推送到单独的git repo上,而无需有一个大项目,其中每个人都将其更改提交到同一个开发分支,这意味着每个PR可能包含所有其他开发人员更改。
微服务可以是解决方案,作为一种体系结构安装非常昂贵,但我认为这是此类项目的最佳解决方案。

之前由@imane bahiaoui提供的微服务解决方案似乎是一个不错的选择,特别是新版本的symfony 4,它是微服务的完美选择。但考虑到您的评论,我建议将您的项目拆分为几个git存储库,并使用
composer
将其捆绑在一起,就像在CI服务器或本地环境的构建过程中它是一个项目一样,您必须注意捆绑包的语义版本控制

这方面的一个示例是Laravel framework源代码composer.json文件:


如果您无法将不同子项目/捆绑包中的代码分开,以便在它们自己的存储库中维护,并且composer需要单独维护,那么处理处理bigish特性的bigish团队最简单、最干净的方法就是使用git flow

基本上,它为每个新特性使用一个单独的分支,当特性准备好进行登台/测试时,从通用开发分支创建并最终合并回通用开发分支

你可以在这里看到一个很好的概览

您不会得到代码分离,但是如果您保持了良好定义的特性,并且具有可靠的体系结构,那么合并应该受到相当大的控制


额外的好处是,该流程由许多工具支持

您正在寻找功能分支工作流吗?不知道,你的问题毫无意义。现在的状态,太宽了。好吧,Alex先生,用其他对你有意义的方式问这个问题,如果你经历了同样的事情,最好的架构、分支工作流、部署解决方案是什么,使您的团队能够轻松地注入他们的PRs并部署他们的更改。这里描述的场景非常常见:您不会仅仅因为合并过程中可能会减少冲突而拆分代码。因为很多事情(解耦、微服务、“SRP”等等)而拆分代码。依我看,每个开发人员都应该每天多次重新设置其分支的基础(如果您经常在原始分支中进行集成),以避免合并噩梦。冲突是这个过程的一部分,即使您将每个git repo的代码拆分为一行,也无法避免冲突。我不是在寻找避免冲突的解决方案,而是在分离的git repo上隔离symfony捆绑包的解决方案。以避免合并其他团队的工作。有时,只有一个团队必须在生产中注入他们的更改,这里的问题是他们必须重新设置基础,以避免数十次提交(这是一个所有其他团队在同一分支中提交的一次回购),在某些情况下根本不可能,因此如何简化此过程。很好,但子模块也可能在某些情况下变得复杂,更确切地说是在构建过程中。我认为这是一个非常昂贵的体系结构来实现,这对我来说是一场革命,我没有时间和资源来实现它。谢谢:)你能给我一个真实的例子吗?你可以看看一些现代的frameworks composer.json,比如laravel framework:,看看
replace
部分,这正是我目前使用的,但它仍然不是一个足够的解决方案,为什么?所有完成的功能都位于同一分支中。假设商业团队想要将功能X注入到prod中,目前我们已经在dev env上完成了15个新功能,这意味着我们必须在git历史中寻找分支X才能将其注入到prod env中,这在现实中是很不容易的。因为一些其他分支可能会将更多最近的内容传递给prod,所以要注入X,您必须管理一个非常困难的重基过程。我的目标是尽可能简化这个过程。gitflow已经提出了一个解决方案。只有计划用于下一版本的功能的分支才应该合并到主开发分支中。检查链接上的第三个图表,如果您不相信您的团队不会做愚蠢的事情,那么您可以使用一些fork和pull请求流,而不是特性分支。这也可能与您的CI很好地集成(如仅当测试通过时才使用pull等)
"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",