如何在 web.config 中转换 mailSettings 而无需源代码管理中的凭据

How to transform mailSettings in web.config, without having credentials in source control

我有一个使用 VSTS 部署到 Azure 应用服务的 Web 应用。到目前为止,我已经成功地使用配置转换和变量替换,以便能够在源代码管理中没有任何敏感信息,但我无法理解如何为系统中的 smtp 凭据执行此操作。net/mailSettings/smtp/network.

有人有什么想法吗?

好的,在深入挖掘并四处询问之后,似乎使用 WebDeploy 和 parameters.xml 是可行的。

这是我所做的:

  1. 我将插件 Replace Tokens 添加到我的 VSTS 帐户。
  2. 我在我的网站项目中添加了一个parameters.xml,它看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>
    <parameters>
      <parameter name="Mail.Username" description="The username used for smtp authentication" defaultValue="#{Mail.UserName}#" tags="">
        <parameterEntry kind="XmlFile" scope="obj\Release\Package\PackageTmp\Web\.config$" match="/configuration/system.net/mailSettings/smtp/network/@userName" />
      </parameter>
      <parameter name="Mail.Password" description="The password used for smtp authentication" defaultValue="#{Mail.Password}#" tags="">
        <parameterEntry kind="XmlFile" scope="obj\Release\Package\PackageTmp\Web\.config$" match="/configuration/system.net/mailSettings/smtp/network/@password" />
      </parameter>
    </parameters>
    
  3. 我的构建步骤已设置为输出包,但这些是构建步骤所需的 MSBuild 参数。 /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=”$(build.artifactstagingdirectory)\” 如果您像我一样正在对连接字符串进行配置转换,您可能还想将 /p:AutoParameterizationWebConfigConnectionStrings=false 添加到该参数列表中。

  4. 在发布配置中,在部署到 Azure App Service 步骤之前,添加一个使用上述 Replace Tokens 插件的步骤。我坚持使用替换值的默认语法,但这些可以更改。由于我使用的是所有默认值,因此我 运行 根目录 中的任务 $(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop 目标文件 *.SetParameters.xml

  5. 然后在 部署到 Azure App Service 步骤中,我选择了选项 Publish using Web Deploy 并为设置参数文件我用了$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml

  6. Post部署操作下,设置部署脚本类型 内联脚本 ,并添加以下脚本。

    @echo off
    del parameters.xml
    

    这是因为默认情况下不提供 .config 文件,但 .xml 文件提供,否则您的 parameters.xml 将以您的 smtp 用户名和密码位于您的 Web 根目录中不受保护纯文本格式。

  7. 接下来添加发布变量命名为Mail.UsernameMail.Password,并填入它们的值。我Mail.Password保密了。

  8. 签入一切,触发构建和发布!