如何将monolith app与多个独立项目对接?

问题描述 投票:0回答:1

我希望在提交更改后使用我的monolith应用程序的docker镜像来测试我的应用程序。我有一个Web应用程序项目和许多库项目(不是应用程序项目!)在分离的解决方案中,这些项目的输出将复制到应用程序的bin放置的路径并使我的应用程序可执行。

我的源代码结构是这样的:

|--Master_Web_App.sln
|     |
|     app.csproj
|
|--projectA.sln
|      | 
|      projectA-1.csproj 
|      | 
|      projectA-2.csproj 
| 
|--projectB.sln 
      | 
      projectB-1.csproj 
      | 
      projectB-2.csproj 

在构建每个项目之后,我将其输出复制到网站定义的物理路径:

wwwroot
|--app
    |
    bin
      |
      app.dll
      projectA-1.dll
      projectA-2.dll
      projectB-1.dll
      projectB-2.dll

我创建了一个基本的docker镜像来运行我的应用程序。当在特定项目中发生更改(ex projectA-1)时,我想创建一个仅将projectA-1的输出复制到目标文件夹的docker镜像FROM baseIamge

假设:

  1. 我应该有一个单一的docker镜像用于项目更改。 (因为我有一个单一的整体应用程序)
  2. 项目分开但是单个Web应用程序的一部分。
  3. 我想创建图像只包括基本图像的变化。

处理它的最佳做法是什么?

我想知道在每个项目的根目录下创建一个Dockerfile并创建一个工具来合并所有这些Dockerfiles(每次更改提交和开发人员选择更改的项目)并制作一个单一但多阶段的Dockerfile!所以Docker Build的结果将是一个包含选定项目输出的图像,并将COPY dll基础图像。但我不确定以编程方式生成Dockerfile文本是一种很好的方法。

docker containers dockerfile
1个回答
1
投票

在开发过程中,您将拥有复杂的项目版本矩阵。

但是一种方法可能是将项目版本/分支作为参数传递给docker构建过程。创建自定义docker构建过程,您可以在其中构建多个项目,作为每个项目一个单独的docker镜像。对于应用程序泊坞窗映像,Dockerfile使用多阶段构建器并使用所有项目映像在各个目录中复制dll。

单独的图像,如:

|--Master_Web_App.sln
|     |
|     app.csproj -> app-dockerimage
|
|--projectA.sln
|      | 
|      projectA-1.csproj  -> projectA-1-dockerimage
|      | 
|      projectA-2.csproj  -> projectA-2-dockerimage
| 
|--projectB.sln 
      | 
      projectB-1.csproj  -> projectB-1-dockerimage 
      | 
      projectB-2.csproj  -> projectB-2-dockerimage 

主码头图像:

# app docker image
FROM projectA-1-dockerimage as projectA-1
FROM projectA-2-dockerimage as projectA-2
FROM projectB-1-dockerimage as projectB-1
FROM projectB-2-dockerimage as projectB-2

FROM BASE_IMAGE

# other steps
#Build process app.dll

COPY FROM --projectA-1 wwwroot/app/bin/projectA-1.dll
COPY FROM --projectA-2 wwwroot/app/bin/projectA-2.dll
COPY FROM --projectB-1 wwwroot/app/bin/projectB-1.dll
COPY FROM --projectB-2 wwwroot/app/bin/projectB-2.dll
© www.soinside.com 2019 - 2024. All rights reserved.