【问题标题】:How to transform Web.Config using variables instead of XML transform at deployment?如何在部署时使用变量而不是 XML 转换来转换 Web.Config?
【发布时间】:2021-04-08 19:49:37
【问题描述】:

我们目前有以下 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.configWeb.Release.configWeb.config

工件发布后,发布管道触发 Azure App Service 任务部署:

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

我们希望将它们存储为变量,可能在发布管道中(可能创建一个elmah 组包含这些属性/值)并使用这些变量来转换Web.config 文件。 当然,我们仍然希望出现其他 XML 转换设置,例如 &lt;system.web&gt;,但我们希望使用变量而不是 XML 文件来转换 &lt;elmah&gt; 中的属性。

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

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

【问题讨论】:

  • 要正确处理密码,您可能会考虑更好的方法,例如this
  • @LexLi 很好的建议,但 elmah 只是一个用例。我们还有其他需要将键/值存储在其他地方并对其进行转换,所以我仍然希望 Azure Devops 中的解决方案

标签: azure-devops web-config azure-pipelines-release-pipeline azure-pipelines-build-task azure-pipelines-tasks


【解决方案1】:

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

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

更新1

打开.csproj文件并添加&lt;CopyToOutputDirectory&gt;Never&lt;/CopyToOutputDirectory&gt;字段,不会复制Web.Release.config文件。

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

【讨论】:

  • 哦,有趣!谢谢我会试试看!我如何告诉管道忽略发布Web.Release.config 文件?负通配!(Web.Release.config) 不起作用
  • 嗨@Cataster,我已经更新了答案,你可以检查一下并在这里分享结果。
  • 嗨@Cataster,刚刚签到看看这个问题现在是否仍然阻碍你?这个问题有更新吗?
  • 嗨 Vito,感谢您的更新。我正在等待第三方扩展 Replace Tokens 的批准,这就是为什么我还没有更新。管理层现在批准了,所以我可以试用一下并回复您。
  • 嗨 Vito,我还在测试它,我很快就会更新你
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2015-07-03
  • 2023-04-02
  • 2011-05-12
  • 2012-07-22
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多