Azure DevOps CI / CD和将连接字符串与源代码控制分开

时间:2019-02-08 22:13:59

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

因此,我通过许多博客/ SO帖子遵循了许多不同的想法/策略,但是我一直找不到自己的想法解决方案。

我在使用什么

  • Visual Studio 2017 v15.9.6
  • Git(源代码控制)
  • Azure DevOps CI / CD
  • Azure App Service(用于托管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”。

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

问题

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

2 个答案:

答案 0 :(得分:5)

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

如果所有资源都驻留在Azure中,请使用托管服务身份,这样您就不必打扰连接字符串了。

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

答案 1 :(得分:1)

要发布Web Apps的VSRM任务支持Web.config中的覆盖值。您可以将秘密保留在VSRM中,并在部署时将其替换。参见File transforms and variable substitution reference # XML variable substitution