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

时间:2018-04-21 08:22:19

标签: asp.net web-config azure-devops azure-web-sites config-transformation

我有一个使用VSTS部署到Azure App Service的Web应用程序。到目前为止,我已成功使用配置转换和变量替换,以便能够在源代码管理中没有任何敏感信息,但我无法理解如何在system.net/mailSettings中为smtp凭据做到这一点/ SMTP /网络。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

好的,经过挖掘,并四处询问,似乎使用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应用服务步骤之前,使用上述Replace Tokens插件添加一个步骤。我坚持使用替换值的默认语法,但可以更改这些语法。由于我使用了所有默认值,因此我在根目录 $(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop目标文件 *.SetParameters.xml

    <中运行任务/ LI>
  5. 然后在部署到Azure应用服务步骤中,我选择了使用Web Deploy发布选项和 SetParameters文件使用$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml

  6. 部署后操作 下,将部署脚本类型设置为内联脚本,然后添加以下脚本。

    @echo off
    del parameters.xml
    

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

  7. 接着添加名为 Mail.Username Mail.Password 发布变量,并填写其值。我把Mail.Password作了秘密。

  8. 签入所有内容,然后触发构建和发布!