因此,我一直在通过许多博客/SO 帖子遵循许多不同的想法/策略,但我一直无法找到我的想法解决方案。
我正在使用什么
- Visual Studio 2017 v15.9.6
- Git(源代码控制)
- Azure DevOps CI/CD
- Azure 应用服务(用于托管 Web API)
目标
目标是使用 Azure DevOps 工具提交我的项目更改,将更改推送(通过 Git)到 Azure DevOps 存储库,让 CI/CD 构建项目遵循管道规则以部署到开发/生产/等。在此期间,请保持连接字符串不受源代码控制。
目前,我有一个网站(旧版 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): Error : Copying file ConnectionStrings.config to obj\Release\Package\PackageTmp\ConnectionStrings.config failed. Could not find file 'ConnectionStrings.config'.
显然,因为我没有将此文件添加到源代码管理中。主要是因为即使在开发过程中我也需要输入实际的连接字符串用户名/密码。
问题
还有哪些其他解决方案/功能可以帮助完成此场景?
最佳答案
简短回答:不要将 secret 放入配置文件中。
如果您的所有资源都驻留在 Azure 中,请使用托管服务标识,这样您就无需为连接字符串而烦恼。
如果没有,请使用ARM templates and key vault-linked parameters管理您的 Azure 基础架构。 Azure Web Apps 允许您使用 Web 应用内的应用设置/连接字符串覆盖配置文件。因此,只需使用 Key Vault 来管理这些内容,并告诉 Web 应用程序从 Key Vault 中提取值即可。
关于git - Azure DevOps CI/CD 以及将连接字符串与源代码管理分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600972/