You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure应用服务槽交换后如何直接修改web.config参数值?

解决方案

一、修改web.config的两种常用方法

方法1:用Azure应用设置覆盖(推荐,不用改文件)

如果是ASP.NET应用,Azure App Service的应用设置会自动覆盖web.config里<appSettings>或<connectionStrings>节点的值,优先级比文件本身高,这种方式不用碰web.config文件,安全还方便管理:

  • 在槽交换任务后加一个AzureAppServiceSettings@1任务,直接更新目标槽的配置:
- task: AzureAppServiceSettings@1
  inputs:
    azureSubscription: 'subscrip1'
    appName: 'xxx-one-swapslottest-67'
    resourceGroupName: 'xxx-one-rgtest-67'
    slotName: 'production' # 交换后的目标槽,这里填生产槽
    appSettings: |
      [
        {
          "name": "你的配置键名",
          "value": "新的配置值",
          "slotSetting": false # 要让这个配置只对当前槽生效,就改成true
        }
      ]
    # 如果要改连接字符串,加下面的参数
    connectionStrings: |
      [
        {
          "name": "你的连接字符串键名",
          "value": "新的连接字符串",
          "type": "SQLAzure",
          "slotSetting": false
        }
      ]

方法2:通过Kudu API直接修改web.config文件

如果必须改web.config里非应用设置的节点(比如system.web下的参数),可以用Kudu的REST API配合PowerShell远程操作:

  1. 先拿Kudu的访问凭据,下载web.config改完再传回去,直接加个Azure PowerShell任务就行:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'subscrip1'
    ScriptType: 'InlineScript'
    Inline: |
      # 定义参数
      $resourceGroupName = "xxx-one-rgtest-67"
      $webAppName = "xxx-one-swapslottest-67"
      $slotName = "production" # 目标槽名称

      # 获取Kudu发布凭据
      $publishingCredentials = Get-AzWebAppPublishingProfile -ResourceGroupName $resourceGroupName -Name $webAppName -Slot $slotName -OutputFile "publishprofile.xml" -Format WebDeploy
      $xmlContent = [xml](Get-Content "publishprofile.xml")
      $userName = $xmlContent.publishData.publishProfile[0].userName
      $password = $xmlContent.publishData.publishProfile[0].userPWD

      # 构建Kudu API地址
      $kuduApiUrl = "https://$webAppName`-$slotName.scm.azurewebsites.net/api/vfs/site/wwwroot/web.config"

      # 生成认证头
      $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $userName, $password)))
      $headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}

      # 下载当前web.config
      $webConfigContent = Invoke-RestMethod -Uri $kuduApiUrl -Headers $headers -Method Get

      # 修改配置,比如把compilation的debug改成false
      $webConfigXml = [xml]$webConfigContent
      $webConfigXml.configuration.system.web.compilation.debug = "false"
      $updatedContent = $webConfigXml.OuterXml

      # 上传修改后的文件
      Invoke-RestMethod -Uri $kuduApiUrl -Headers $headers -Method Put -Body $updatedContent -ContentType "application/xml"
    azurePowerShellVersion: 'LatestVersion'

二、解决PowerShell任务路径不存在的问题

出现这个问题是因为Pipeline代理的本地文件系统和Azure App Service的远程文件系统完全不搭边,你不能用本地路径去访问应用服务的文件。解决办法就是用Kudu API或者Azure官方的cmdlet远程操作,上面的方法2已经用Kudu API实现了远程修改,另外也可以用Azure CLI任务:

- task: AzureCLI@2
  inputs:
    azureSubscription: 'subscrip1'
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # 用az命令修改应用服务配置(部分配置支持直接用这个命令改)
      az webapp config set --resource-group xxx-one-rgtest-67 --name xxx-one-swapslottest-67 --slot production --php-version 7.4 # 示例:修改PHP版本,对应web.config里的配置

内容的提问来源于stack exchange,提问作者devopsseeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:55:34