【问题标题】:How to switch Database connection while staging to production hot swap如何在暂存到生产热插拔时切换数据库连接
【发布时间】:2018-09-05 09:44:07
【问题描述】:

我在 VSTS 上有一个 CI/CD 管道,有以下注意事项:

  • Web 应用是一个 ASP.NET Core 项目,托管在 Azure 上,带有一个“暂存”插槽

  • Staging 将连接到非生产/同步数据库进行测试

  • Staging 中的连接字符串将指向 Staging DB

  • 生产中的连接字符串将指向生产数据库

  • 在进行热插拔时,连接字符串应与暂存的连接字符串保持不变,因为它将成为新的生产。

我面临的问题是在进行热插拔时,连接字符串将从生产 Web 应用程序的应用程序设置中选择,这将指向生产数据库。

可以在 Azure 门户上的 Azure Web 应用程序的应用程序设置中更改连接字符串,但它需要重新启动 - 这将否定热交换的价值!

关于如何在进行热交换时替换连接字符串的任何提示。

PS:我们在 Azure 门户的 Web 应用 > 应用程序设置中提到了连接字符串

提前致谢!

编辑 1:

这是我的考虑的描述:

【问题讨论】:

  • 如果我理解正确,您有一个暂存环境,它位于生产环境的部署槽上,对吧?如果是这样:请不要。由于部署槽指向相同的应用程序服务计划,登台上的重负载(或坏版本)可能会扰乱您的生产环境。拥有一个实际、独立的暂存环境来进行所有测试,并使用部署槽作为准备好能够交换的新部署。至于您的问题:请参阅@GauravMantri 的评论 :)
  • 感谢@rickvdbosch 的提示,我知道风险。由于应用程序有点小 - 我想在这里省钱。
  • 感谢@GauravMantri 先生的指点,让我试试。我添加了对问题陈述的描述。我知道这是不可取的,只是为了避免使用另一个环境。
  • 你想什么时候换槽?在构建/发布期间?详细的工作流程是什么?

标签: azure azure-devops azure-web-app-service continuous-deployment


【解决方案1】:

请注意,如果您使用相同的应用服务计划,一种环境可能会干扰另一种环境。考虑到这一点,并假设您使用的是发布管理器,您可以:

1 - 在一个版本中创建两个独立的环境,一个用于暂存,一个用于生产

2 - 在 web.config 中创建一个与连接字符串名称同名的变量,一个用于暂存环境,另一个用于生产。

3 - 向每个环境添加部署 Azure 应用服务任务。

然后您可以使用文件转换和替换选项并标记进行转换。它将使用您的变量的名称并在您的配置文件中替换它。看看 XML 转换和 JSON 转换https://docs.microsoft.com/en-us/vsts/build-release/tasks/transforms-variable-substitution?view=vsts

您可以添加应用程序和配置设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多