我有一个 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
}
}
答案 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 中的自动数组 $args
。
了解更多info