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