在Docker外部构建.NET应用程序是一个好主意吗?

75次阅读
没有评论

问题描述

公司使用Azure DevOps和Pipelines来构建、测试和部署.NET Framework应用程序。用户的老板明确表示希望将所有的微服务容器化,并在某个时候开始使用Kubernetes。在这个过程中,用户还将逐步将应用程序迁移到.NET Core。

用户已经为其中一个微服务创建了一个多阶段的Dockerfile(构建和运行时,但还没有测试),但老板建议我们可以通过继续使用Pipelines来构建和测试应用程序,并在稍后的任务中将编译后的应用程序添加到Azure DevOps中的Docker容器中来简化它。根据我所知,这似乎是一个反模式(我可能错了),我理解他想要简化的愿望。

这是一个反模式还是一个好主意?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

将构建和测试步骤放在Docker中,然后将构建好的镜像推送到Docker仓库中。这样可以确保构建和测试的环境与生产环境一致,并且可以轻松地在不同的环境中部署应用程序。

以下是一种可能的解决方案:
1. 创建一个多阶段的Dockerfile,其中包含构建和测试的步骤。
2. 在Dockerfile中使用多个阶段来分别构建和测试应用程序。
3. 在构建阶段中,使用.NET Core SDK来构建应用程序,并将构建好的文件作为构建的输出。
4. 在测试阶段中,使用适当的测试框架来运行单元测试和集成测试。
5. 如果测试通过,将构建好的应用程序文件复制到最终的生产环境镜像中。
6. 推送最终的镜像到Docker仓库中,以便在部署时使用。

这种方法的优点是可以确保构建和测试的环境与生产环境一致,并且可以轻松地在不同的环境中部署应用程序。但是,这也会增加一些复杂性,因为需要在Docker中进行构建和测试。

方案2

如果你希望保持Pipelines的简单性,可以将构建和测试步骤分开,但仍然在Docker中运行应用程序。

以下是一种可能的解决方案:
1. 在Pipelines中使用Docker来构建应用程序。
2. 在构建步骤中,使用.NET Core SDK来构建应用程序,并将构建好的文件作为构建的输出。
3. 将构建好的应用程序文件复制到Docker容器中。
4. 在Docker容器中运行应用程序,并在容器中运行测试。

这种方法的优点是可以保持Pipelines的简单性,并且可以在Docker中运行应用程序。但是,这也会增加一些复杂性,因为需要在Pipelines中使用Docker来构建和测试应用程序。

方案3

如果你希望保持Pipelines的简单性,并且不想在Docker中进行构建和测试,你可以将构建和测试步骤分开,并在Pipelines中运行应用程序。

以下是一种可能的解决方案:
1. 在Pipelines中使用.NET Core SDK来构建应用程序。
2. 在构建步骤中,使用.NET Core SDK来构建应用程序,并将构建好的文件作为构建的输出。
3. 在Pipelines中运行应用程序,并在Pipelines中运行测试。

这种方法的优点是可以保持Pipelines的简单性,并且可以在Pipelines中运行应用程序。但是,这也会增加一些复杂性,因为需要在Pipelines中使用.NET Core SDK来构建和测试应用程序。

请根据你的具体需求选择适合你的解决方案。

正文完