如何在 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 是可行的。
这是我所做的:
- 我将插件 Replace Tokens 添加到我的 VSTS 帐户。
我在我的网站项目中添加了一个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>
我的构建步骤已设置为输出包,但这些是构建步骤所需的 MSBuild 参数。 /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=”$(build.artifactstagingdirectory)\”
如果您像我一样正在对连接字符串进行配置转换,您可能还想将 /p:AutoParameterizationWebConfigConnectionStrings=false
添加到该参数列表中。
在发布配置中,在部署到 Azure App Service 步骤之前,添加一个使用上述 Replace Tokens 插件的步骤。我坚持使用替换值的默认语法,但这些可以更改。由于我使用的是所有默认值,因此我 运行 根目录 中的任务 $(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop
和 目标文件 *.SetParameters.xml
然后在 部署到 Azure App Service 步骤中,我选择了选项 Publish using Web Deploy 并为设置参数文件我用了$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml
在Post部署操作下,设置部署脚本类型 到 内联脚本 ,并添加以下脚本。
@echo off
del parameters.xml
这是因为默认情况下不提供 .config 文件,但 .xml 文件提供,否则您的 parameters.xml
将以您的 smtp 用户名和密码位于您的 Web 根目录中不受保护纯文本格式。
接下来添加发布变量命名为Mail.Username和Mail.Password,并填入它们的值。我Mail.Password保密了。
签入一切,触发构建和发布!
我有一个使用 VSTS 部署到 Azure 应用服务的 Web 应用。到目前为止,我已经成功地使用配置转换和变量替换,以便能够在源代码管理中没有任何敏感信息,但我无法理解如何为系统中的 smtp 凭据执行此操作。net/mailSettings/smtp/network.
有人有什么想法吗?
好的,在深入挖掘并四处询问之后,似乎使用 WebDeploy 和 parameters.xml 是可行的。
这是我所做的:
- 我将插件 Replace Tokens 添加到我的 VSTS 帐户。
我在我的网站项目中添加了一个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>
我的构建步骤已设置为输出包,但这些是构建步骤所需的 MSBuild 参数。
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=”$(build.artifactstagingdirectory)\”
如果您像我一样正在对连接字符串进行配置转换,您可能还想将/p:AutoParameterizationWebConfigConnectionStrings=false
添加到该参数列表中。在发布配置中,在部署到 Azure App Service 步骤之前,添加一个使用上述 Replace Tokens 插件的步骤。我坚持使用替换值的默认语法,但这些可以更改。由于我使用的是所有默认值,因此我 运行 根目录 中的任务
$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop
和 目标文件*.SetParameters.xml
然后在 部署到 Azure App Service 步骤中,我选择了选项 Publish using Web Deploy 并为设置参数文件我用了
$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml
在Post部署操作下,设置部署脚本类型 到 内联脚本 ,并添加以下脚本。
@echo off del parameters.xml
这是因为默认情况下不提供 .config 文件,但 .xml 文件提供,否则您的
parameters.xml
将以您的 smtp 用户名和密码位于您的 Web 根目录中不受保护纯文本格式。接下来添加发布变量命名为Mail.Username和Mail.Password,并填入它们的值。我Mail.Password保密了。
签入一切,触发构建和发布!