我有一个使用 VSTS 部署到 Azure 应用服务的 Web 应用。到目前为止,我已经成功地使用配置转换和变量替换,能够在源代码管理中没有任何敏感信息,但我无法弄清楚如何为 system.net/mailSettings/smtp/network 中的 smtp 凭据执行此操作。
有人有什么想法吗?
好的,经过一番挖掘,并四处询问,似乎使用 WebDeploy 和参数.xml正在工作。
这是我所做的:
- 我将插件替换令牌添加到我的 VSTS 帐户。
-
我在网站项目中添加了一个参数.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 应用服务"步骤之前,使用上述"替换令牌"插件添加一个步骤。我坚持使用替换值的默认语法,但这些语法可以更改。由于我使用的是所有默认值,因此我在根目录
$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop
和目标文件中运行任务*.SetParameters.xml
然后在"部署到 Azure 应用服务"步骤中,我选择了"使用 Web 部署发布"选项,对于我使用的SetParameters 文件
$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml
在"部署后操作"下,将"部署脚本类型"设置为"内联脚本",然后添加以下脚本。
@echo off del parameters.xml
这是因为默认情况下不提供 .config 文件,但.xml文件提供,否则您的
parameters.xml
将位于您的 Web 根目录中不受保护,您的 smtp 用户名和密码为纯文本。接下来,添加名为Mail.Username和Mail.Password的发布变量,并填写它们的值。我把Mail.Password定为秘密。
签入所有内容,并触发构建和发布!