繁体   English   中英

Azure DevOps CI/CD 和从源代码管理中分离连接字符串

[英]Azure DevOps CI/CD and Separating Connection Strings from Source Control

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

我在用什么

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

目标

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

目前,我有一个网站(旧版 Web 应用程序),它在外部连接字符串文件(基于这篇文章连接字符串和配置文件)上具有本地连接字符串定义。 它作为应用服务托管在 Azure 上。 在我的.gitignore文件中,我让 Git 忽略了特定的连接字符串文件,因此它不在源代码管理中。 使用 Azure 的 GitHub 部署功能,该站点使用 GitHub 中的源进行更新。 但是,我必须手动上传带有错误/错误数据的连接字符串文件。 我使用 Azure 的应用程序设置来定义连接字符串本身。 这个过程工作得很好。

问题

我有一个新的 .Net Web API 项目,从 .Net Framework 4.7.2 开始。 我也跟着文章把连接字符串分成单独的文件,这样我也可以在源代码管理中忽略该文件。 当 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”。

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

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

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

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

如果没有,请使用ARM模板和密钥保管库链接参数来管理Azure基础结构。 Azure的Web应用程序允许您重写与web应用程序内的应用程序设置/连接字符串配置文件。 因此,只需使用密钥保管库来管理这些内容,并告诉Web应用程序从密钥保险库中提取值。

发布Web应用程序的VSRM任务支持覆盖Web.config中的值。 您可以将您的秘密保存在VSRM中,并在部署时间内替换它们。 请参阅文件转换和变量替换参考#XML变量替换

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM