存储微型服务子模块,但仍然使用叉子

我被困在这里。 很多这已经到位,它只是我无法弄清楚的包装。

我们有一个微服务架构,有许多独立的存储库。 我们正在使用Docker和Docker Compose来构build和运行开发环境,这非常适用。

我有这个问题,是如何打包存储库的主要集合。 所以如果我有像这样的文件夹结构:

\ service1 .git Dockerfile service2 .git Dockerfile service3 .git Dockerfile docker-compose.yml README.md 

…在哪里service1,service2,service3都是他们自己的git仓库。

我的第一个想法是使用git子模块,这工作,但是我们强制执行政策,要求开发人员叉存储库,而不是由于持续集成约束和代码审查的主要存储库。 即使在我想到这个警告之前,我对于使用git子模块也不是过于兴奋,所以可选的解决scheme将是更受欢迎的。

目前我只能认为编写脚本来存储一个仓库列表; 为每个查询运行一个查询,以查看login的开发人员是否拥有各自的分支,如果不是,则创build一个分支,然后拉入主文件夹; 然后启动docker-compose。 这似乎是一个可怕的解决scheme,但足以让我只需要写文档,告诉开发人员如何手动执行此过程…

思考?

谢谢你的时间 :)

我有类似的问题与工作stream(除了我没有使用叉)。 最终我的要求归结为1件事:

  • 作为开发人员,我想运行1个命令project bootstrap来引导我的环境

我会build议做一些事情来优化工作stream程,这对我来说工作得非常好:

  • 在JSON文件中存储服务列表,其中每个服务都具有“url”,“fork_url”,“name”以及docker所需的其他常用属性,以了解如何处理此服务。 看起来你的团队中的每个团队成员都有fork url或base repo url

  • 构build一个命令行应用程序(有很多选项可用 – 取决于您select的语言,对于Ruby而言,它是gem Thor,Go it的包Cobra等)。 通常需要几个小时来构build一个简单的命令行应用程序结构和一对夫妇的命令,但是这种自动化将每天节省您的时间,您将有一个基础来扩展您的命令行随着你的需求增加,这个概念被certificate是可行和有用的。 您还将拥有统一的界面,为所有团队成员提供您的环境,然后成为团队的职责来维护它。

  • build立一个project bootstrap命令来configuration你的环境。 例如,它会:
    • 从您的JSON文件中查看服务列表:
      • 做一个叉如果不存在
      • 克隆你的回购
      • 添加另一个远程回购,这将代表叉(除了原产地)
      • 将从指定目录中的模板生成docker-compose.yml

这可能取决于您的工作stream程。 您是否可能一次对多个服务进行更改?

如果您通常在任何时候只更改一个或两个服务,则可以将docker-compose.yml设置为仅使用image字段(而不是build ),并且不使用任何主机卷。 通过这个设置,检查代码的位置并不重要,因为docker-compose.yml仅使用docker-compose.yml守护进程可用的映像。

这将需要你在每个回购中有其他docker-compose.yml文件(或bash脚本,makefile等)来为每个服务构build图像。

如果您需要主机卷进行交互式开发,则可以使用docker-compose.override.yml来根据需要添加它们(但是,开发人员可以将其指向正确的path)。

我不得不在工作中解决类似的问题(尽pipe我们不使用Docker,而是为每个微服务提供了一个虚拟机的Vagrantfile )。

创build一个包含你docker-compose.ymldevelop库。 每个开发人员都应该将develop库和微服务的克隆克隆到一个公共目录(例如~/workspace ):

 /Users/conar/workspace /develop /docker-compose.yml /service1 /Dockerfile /app.js /service2 /Dockerfile /app.js /service3 /Dockerfile /app.js 

docker-compose.yml可能如下所示:

 service1: build: ../service1/Dockerfile volumes: - ../service1:/app service2: build: ../service2/Dockerfile volumes: - ../service2:/app service3: build: ../service3/Dockerfile volumes: - ../service3:/app 

现在,每个服务的app.js (以及所有其他代码)都可以在/app