【问题标题】:Azure DevOps CI/CD and Separating Connection Strings from Source ControlAzure DevOps CI/CD 和从源代码管理中分离连接字符串
【发布时间】:2021-11-08 21:55:16
【问题描述】:

所以我一直在通过许多博客/SO 帖子遵循许多不同的想法/策略,但我一直无法找到我的想法解决方案。

我在用什么

  • Visual Studio 2017 v15.9.6
  • Git(源代码管理)
  • Azure DevOps CI/CD
  • Azure 应用服务(用于托管 Web API)

目标

目标是使用 Azure DevOps 工具提交我的项目更改,将更改推送(通过 Git)到 Azure DevOps 存储库,让 CI/CD 构建预计遵循管道规则以部署到 dev/production/etc .在此期间,将连接字符串置于源代码控制之外。

目前,我有一个网站(旧版 Web 应用程序)在外部连接字符串文件上具有本地连接字符串定义(基于这篇文章 Connection Strings and Configuration Files)。它在 Azure 上作为应用服务托管。在我的 .gitignore 文件中,我让 Git 忽略了特定的连接字符串文件,因此它不在源代码控制中。使用 Azure 的从 GitHub 部署功能,该站点将使用 GitHub 中的源进行更新。 但是,我不得不手动上传带有错误/错误数据的连接字符串文件。我使用 Azure 的应用程序设置自己定义连接字符串。这个过程完美无缺。

问题

我有一个从 .Net Framework 4.7.2 开始的新 .Net Web API 项目。我还按照文章将连接字符串分成单独的文件,这样我也可以在源代码管理中忽略该文件。当 Azure DevOps 构建项目时,它会说:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets(2603,5): 错误:将文件 ConnectionStrings.config 复制到 obj\Release\Package\PackageTmp\ConnectionStrings.config 失败。可以 找不到文件“ConnectionStrings.config”。

很明显,因为我没有将此文件添加到源代码管理中。主要是因为即使在开发过程中我也需要输入实际的连接字符串用户名/密码。

问题

还有哪些其他解决方案/功能可以帮助完成此场景?

【问题讨论】:

    标签: git visual-studio azure continuous-integration azure-devops


    【解决方案1】:

    简答:不要将秘密放在配置文件中。

    如果您的所有资源都驻留在 Azure 中,请使用托管服务标识,这样您就无需担心连接字符串。

    如果没有,请使用 ARM templates and key vault-linked parameters 管理您的 Azure 基础架构。 Azure Web 应用程序允许您使用应用程序设置/连接字符串覆盖配置文件在 Web 应用程序内。因此,只需使用密钥保管库来管理这些内容,并告诉 Web 应用从密钥保管库中提取值。

    【讨论】:

    • 这个“密钥库”听起来很有趣,我正要研究但还不确定。我现在会调查它。
    • 经过大量审查并尝试设置它,我被困在大约 75% 的实施密钥保管库引用。主要停留在如何正确获取我的Web.config 文件中的connectionStrings 部分或弄清楚如何正确将连接发送到DbContext。虽然我的问题没有问这些细节,但这个答案是目前最好的答案。谢谢。
    【解决方案2】:

    用于发布 Web 应用程序的 VSRM 任务支持覆盖 Web.config 中的值。您可以将机密保存在 VSRM 中,并在部署时替换它们。见File transforms and variable substitution reference # XML variable substitution

    【讨论】:

    • 嗨!谢谢。我实际上已经在使用它了,但是我认为您错过了我所说的部分...还是我误解了什么?
    • @RoLYroLLs:不要那样做,或者只放 test(或本地)连接字符串用户名/密码,而不是真实的。
    • 我不想这样做,但即使是为了开发这个特定的任务,我也必须这样做。这就是为什么我不想提交文件并想办法为它转换或引用某些东西。就像我认为 Key Vault 的工作方式一样,但仍在试图弄清楚如何让它工作。 =)
    【解决方案3】:

    如果您确实需要将实际的连接字符串文件放入项目中进行调试,并因此在 .gitignore 中添加连接字符串的路径,您可以让 Pipeline 在任务 VSBuild 之前创建一个虚拟连接字符串。 这可以通过File Creator 来完成,他的邮箱是Visual Studio Marketplace。 之后,您只需将实际的连接字符串插入到 Azure 中应用服务的配置中。

    【讨论】:

    • 不错。谢谢了。
    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多