从 Azure Devops 发布管道恢复对 Azure WebApp 的 IP 访问限制

时间:2021-07-19 07:55:33

标签: azure-devops azure-cli

我有一个 Azure Devops 发布管道,用于将文件部署到 Web 应用程序。
在这个过程开始时,当前的 IP 地址存储在一个变量中(下面脚本中的 $ipJson)。然后我删除所有现有的 IP 地址并添加构建代理 IP。

我的文件部署后,我需要恢复原始 IP 地址。我使用的脚本有效,但,需要 10 多分钟才能完成。 IP数量在30-50之间。

我怎样才能提高这个过程的速度?

  • 我应该对脚本进行任何更改吗?
  • 我应该以不同的方式来做吗?

现在它分别添加每个 IP 地址。不知道如何批量执行 - CLI 似乎不可能。

$jsonStr= @"
$(ipJson)
"@

$ipObj = $jsonStr | ConvertFrom-Json
foreach($rule in $ipObj.ipSecurityRestrictions){
  if($rule.name -ne "Deny all" -and $rule.name -ne "Allow all" -and $rule.priority -ne 2147483647){
      $params = "-g", "$(ResourceGroupName)", 
      "-n", "$(WebAppName)"

      if(-not [string]::IsNullOrWhiteSpace($rule.priority)){
        $params += "--priority", "$($rule.priority)"
      }
      if(-not [string]::IsNullOrWhiteSpace($rule.ip_address)){
        $params += "--ip-address", "$($rule.ip_address)"
      }
      if(-not [string]::IsNullOrWhiteSpace($rule.action)){
        $params += "--action", "$($rule.action)"
      }
      if(-not [string]::IsNullOrWhiteSpace($rule.description)){
        $params += "--description", "$($rule.description)"
      }
      if(-not [string]::IsNullOrWhiteSpace($rule.name)){
        $params += "--rule-name", "$($rule.name)"
      }
      if(-not [string]::IsNullOrWhiteSpace($rule.vnet_subnet_resource_id)){
        $params += "--vnet-name", "$($rule.vnet_subnet_resource_id)"
      }
      if(-not [string]::IsNullOrWhiteSpace($rule.subnet_mask)){
        $params += "--subnet", "$($rule.subnet_mask)"
      }

      Write-Host "Adding IP rule $($rule.ip_address) with params $params"
      az webapp config access-restriction add @params
      
  }
}

1 个答案:

答案 0 :(得分:0)

为了减少处理时间,您需要在 cli 中使用 background jobs

 $scriptBlock = {
    Process
    }
Start-Job -ScriptBlock $scriptBlock

正在使用 Foreach 循环“foreach($rule in $ipObj.ipSecurityRestrictions)” $rule 是脚本中的一个变量。

这里的 $rule 如果在 ScriptBlock 中定义,将会有不同的作用域,所以需要将变量从局部作用域传递给作业,即 Start- 上的 ArgumentList 参数-作业并将 $rule 变量更改为 $args[0] 以反映 ScriptBlock 中的自动数组 $argsenter image description here

了解更多info