首页 > 解决方案 > 如何在部署时使用变量而不是 XML 转换来转换 Web.Config?

问题描述

我们目前有以下在部署时Web.Release.config转换的文件。Web.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
  <elmah>
    <errorLog xdt:Transform="Remove" />
    <errorMail xdt:Transform="Remove" />
    <errorMail xdt:Transform="Insert" from="reports@companyxyz.com" to="a23cv@companyxyzteam.slack.com" subject="Dashboard Error" async="true" smtpPort="587" smtpServer="smtp.sendgrid.net" userName="apikey" password="password123" />
  </elmah>
</configuration>

如您所见,配置文件包含敏感信息,例如password.

管道工件包含脚本、内容、捆绑包以及与此问题最相关的Web.Debug.config,Web.Release.configWeb.config:

网络配置

发布工件时,发布管道会触发 Azure 应用服务任务部署:

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

而不是 XML 转换是改变属性password,甚至是to电子邮件属性,我们希望将它们存储为变量,可能在发布管道中(可能创建一个elmah包含这些属性/值的组)并使用这些变量来转换Web.config文件。当然,我们仍然希望出现其他 XML 转换设置,例如,但我们希望使用变量而不是 XML 文件来转换<system.web>像 in 这样的属性。<elmah>

我们怎样才能做到这一点?我知道如何创建变量,但我不确定如何或是否可以Web.config使用变量而不是Web.Debug.configWeb.Release.config

有没有可以做到这一点的设置/任务?

标签: azure-devopsweb-configazure-pipelines-release-pipelineazure-pipelines-build-taskazure-pipelines-tasks

解决方案


我不确定如何甚至是否可以使用变量而不是 Web.Debug.config 或 Web.Release.config 来转换 Web.config 文件

我们可以安装扩展Replace Tokens,添加变量并将变量设置为机密,然后添加任务 Replace Tokens 以替换web.configure变量并在 Azure DevOps 管道中使用它。

更新1

打开.csproj文件并添加字段<CopyToOutputDirectory>Never</CopyToOutputDirectory>,它不会复制Web.Release.config文件。

<None Include="Web.Release.config">
      <DependentUpon>Web.Release.config</DependentUpon>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </None>

推荐阅读