如何在部署时使用变量而不是 XML 转换来转换 Web.Config?
How to transform Web.Config using variables instead of XML transform at deployment?
-
web-config
-
azure-devops
-
azure-pipelines-build-task
-
azure-pipelines-release-pipeline
-
azure-pipelines-tasks
我们目前有以下 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.config
和 Web.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
电子邮件属性的转换,我们希望将它们存储为变量,可能在发布管道(可能创建一个包含这些 attributes/values 的 elmah
组)并使用这些变量来转换 Web.config
文件。
当然,我们仍然希望发生其他 XML 转换设置,例如 <system.web>
,但我们希望 <elmah>
中的属性使用变量而不是 [=48] 进行转换=] 文件.
我们怎样才能做到这一点?
我知道如何创建变量,但我不确定如何或是否可以使用变量而不是 Web.Debug.config
或 Web.Release.config
来转换 Web.config
文件
是否有 setting/task 可以做到这一点?
I am not sure how or if its even possible to transform the Web.config file using variables instead of the Web.Debug.config or Web.Release.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>
web-config
azure-devops
azure-pipelines-build-task
azure-pipelines-release-pipeline
azure-pipelines-tasks
我们目前有以下 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.config
和 Web.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
电子邮件属性的转换,我们希望将它们存储为变量,可能在发布管道(可能创建一个包含这些 attributes/values 的 elmah
组)并使用这些变量来转换 Web.config
文件。
当然,我们仍然希望发生其他 XML 转换设置,例如 <system.web>
,但我们希望 <elmah>
中的属性使用变量而不是 [=48] 进行转换=] 文件.
我们怎样才能做到这一点?
我知道如何创建变量,但我不确定如何或是否可以使用变量而不是 Web.Debug.config
或 Web.Release.config
Web.config
文件
是否有 setting/task 可以做到这一点?
I am not sure how or if its even possible to transform the Web.config file using variables instead of the Web.Debug.config or Web.Release.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>