我们有一个由许多单独项目组成的 C# ASP.NET MVC 解决方案,支持多种解决方案配置。每个配置都已就位,因为每个环境需要不同的设置,同时共享相同的代码库。
设置存储在多个
.config
文件中,并且使用转换文件应用环境特定设置。
例如,我们在 Logging 项目中有一个 Logging.config 文件,它存储 Logger 设置和相关的转换文件。在解决方案资源管理器中,它看起来像这样:
我们正在使用 Azure DevOps Pipelines 创建构建包,但是即使代码库不受影响,我们也被迫多次重建项目,因此我们正在寻找一种优化流程的方法,理想情况下应该看起来像这样像这样:
优点是我们可以在每个环境中部署相同的代码,并在网站目录之上应用相关配置。
如何实现这一目标?
如果您使用 Azure DevOps,您可以使用内置功能来进行转换。
在您的发布管道中,无论您部署到本地 IIS(使用
IIS Web App Deploy
任务)还是部署到 Azure(使用 Azure App Service Deploy
任务),您都有“文件转换和变量替换选项”,您可以在其中检查“XML 转换” ”。
这个选项的含义是什么?如果您有一个带有环境名称的配置文件,例如:
*.UAT.config
(并且在发布到名为 UAT 的环境中),那么 Azure DevOps 会获取该文件并将使用常规配置文件进行转换。
因此,您有一个构建,并在发布管道中转换配置文件并将应用程序部署到您的环境中。
构建项目后,只需在名为 Azure App Service Deploy 的发布管道中添加一个任务,如果您在 文件转换和变量替换选项菜单下选择 XML 转换,您的转换将自动完成:
请注意,配置转换将针对
*.EnvironmentName.config
文件上的 *.config
运行,因此所有配置都必须等于环境名称。例如,如果您的环境称为测试,那么您的配置应该是 *.test.config
Web.$(environment).config => web.config
,其中 $(environment) 是您的变量,您可以在其中设置环境名称: