symfony隔离软件包可以使每个团队在其单独的软件包中工作

时间:2018-07-09 15:49:44

标签: symfony github devops software-design software-distribution

我有一个用symfony3写的巨大的api,其中包含几个捆绑包(所有捆绑包都包含在同一个git repo中),我们有多个团队为各自的捆绑包工作,我的问题是:我们有一个由env分支的公司,所以,如果开发人员在dev分支上工作,尽管其他所有团队都使用同一个分支,则他不能将自己的代码集成到prod分支上,因为其他人所做的所有其他更改也可能注入到prod上,这是非常复杂的情况。 那么,如何拆分我的应用程序,使每个团队都可以在分支环境中提交/推送自己的工作,而无需那么复杂的过程? 在这种情况下使用的最佳架构是什么,如何使用symfony将每个捆绑包隔离到其他捆绑包?或者,如果您已经经历过相同的事情,您会收到什么?知道我的devops平台是基于wercker CI的,它会构建一个包含所有symfony捆绑包的大映像docker,并将其部署到Amazon ecs。

4 个答案:

答案 0 :(得分:2)

您可以使用子模块或使用git子模块或使用composer结构拆分应用程序,这意味着在CI中构建应用程序时composer必须需要所有捆绑软件,这样您就可以流畅地继续开发

答案 1 :(得分:2)

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

答案 2 :(得分:2)

@ imane-bahiaoui提供的先前的微服务解决方案似乎是一个不错的选择,尤其是对于新版本的symfony 4,它是微服务的完美选择。但是考虑到您的意见,我建议将您的项目分成几个git存储库,并使用composer将其捆绑在一起,就好像在CI服务器或本地环境中的构建过程中是一个项目一样,您必须注意捆绑软件的语义版本化。

Laravel框架源代码composer.json文件是一个示例:

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",

答案 3 :(得分:1)

如果您无法将代码分开放在不同的子项目/程序集中,以将其维护在自己的存储库中,并且不能由作曲家单独要求,那么处理大型团队处理大型功能的最简单,最干净的方法就是使用git flow。

基本上,它为每个新功能使用一个单独的分支,当该功能准备好进行登台/测试时,它将从通用dev分支创建并最终合并回通用dev分支。

您可以在此处看到不错的概述

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

您不会得到代码分离,但是如果您对功能进行了良好定义并拥有可靠的体系结构,则应该对合并进行充分控制。

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