【问题标题】:How to perform XML variable substitution on mailSettings file?如何对 mailSettings 文件执行 XML 变量替换?
【发布时间】:2021-05-20 05:18:46
【问题描述】:

我们有一个带有以下 system.net mailSettings 属性的 Web.config 文件:

<system.net>
    <mailSettings>
      <smtp configSource="mailSettings.config" />
    </mailSettings>
  </system.net>

mailSettings.config 文件位于项目子根目录下,仅包含以下几行:

<smtp from="reports@companyxyz.com" deliveryMethod="Network">
  <network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="" password="" />
</smtp>

我们希望将用户名和密码属性存储为发布管道中的变量(最终存储在 Azure Key Vault 中,但不在此范围内),并且在 Azure 应用部署任务(下面的 yaml)中有一个 XML 选项变量转换/替换。

steps:
- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy Azure App Service'
  inputs:
    azureSubscription: '$(Parameters.ConnectedServiceName)'
    appType: '$(Parameters.WebAppKind)'
    WebAppName: '$(Parameters.WebAppName)'
    enableCustomDeployment: true
    TakeAppOfflineFlag: false
    RenameFilesFlag: false
    enableXmlTransform: true
    enableXmlVariableSubstitution: true

我已经启用了,但是它怎么知道要转换 mailSettings.config 模板文件呢?

这是 XmlVariableSubstitution 开关的说明:

在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目匹配。变量替换在配置转换后运行。

注意:如果在发布管道和环境中定义了相同的变量,则环境变量将取代发布管道变量。

【问题讨论】:

    标签: azure-devops azure-pipelines-release-pipeline


    【解决方案1】:

    在您的情况下,标准替换将不起作用,因为您已经发现:

    在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目相匹配。变量替换在配置转换后运行。

    您仍然可以通过使用扩展来实现您的目标 - Replace Tokens

    对于默认任务配置,您需要更改文件以将令牌定义为 #{VARIABLE_NAME}#。所以你的情况是:

    <smtp from="reports@companyxyz.com" deliveryMethod="Network">
      <network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="#{USER_NAME}#" password="#{PASSWORD}#" />
    </smtp>
    

    还要确保放置正确的目标文件。

    【讨论】:

    • 有趣!我安装了替换令牌,“还要确保放置正确的目标文件。”是什么意思?喜欢你说的路径吗?
    • 是的,你的文件的路径。
    • 如果我在配置文件中创建了管道变量userNamepassword,它们应该是:userName="#{userName}#" password="#{password}#" 对吧?我是否也将此任务放在 Azure App Deploy 任务之前?还是之后?
    • 好的,要求稍微改变一下:我们不想替换用户名和密码值,而是希望将 web 配置中的这一行:&lt;smtp configSource="mailSettings.config" /&gt; 替换为值为&lt;smtp from="reports@companyxyz.com" deliveryMethod="Network"&gt; &lt;network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="" password="" /&gt; &lt;/smtp&gt; 的管道变量。此外,由于开发人员不想更改 web 配置文件以适应替换令牌任务所需的前缀和足够的内容,我们希望使用自定义令牌前缀,例如:&lt;mailSettings&gt;
    猜你喜欢
    • 2021-07-10
    • 2010-10-19
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多