我有一個連接到 Azure 資料庫并執行 SQL 腳本的 powershell 任務。該腳本在其相應 IP 地址或范圍已在 Azure 的防火墻規則中設定為允許的任何計算機上執行時有效。
問題是當腳本在 DevOps 管道中執行時,我總是得到錯誤,
" Invoke-Sqlcmd : 無法打開登錄請求的服務器 'SERVERNAME'。IP 地址為 'XX.XXX.XXX.XXX' 的客戶端不允許訪問服務器。要啟用訪問權限,請使用 Windows Azure 管理門戶或運行 sp_set_firewall_rule在主資料庫上為此 IP 地址或地址范圍創建防火墻規則。此更改可能需要長達五分鐘才能生效。 "
我了解發生了什么,但是在根據錯誤期間參考的 IP 設定了指定的 IP 范圍之后;在隨后的執行中,代理在我允許的范圍之外的另一個 IP 上運行。
在這樣做了幾次之后,很明顯,出于安全原因,我只是將 IP 范圍擴大到無法接受的程度。
所以問題是有一種方法可以限制/控制 DevOps 運行代理的范圍,這些代理需要訪問受防火墻訪問控制的基于 Azure 的資源?
uj5u.com熱心網友回復:
您訪問多個 IP 的原因是您使用的是Microsoft 托管的代理,該代理將每周更新一次,具體取決于 Microsoft Azure 資料中心
我可以想到兩種解決方案來解決您的問題
解決方案 1:(一些解決方法并與您的安全團隊討論)
在您的管道中添加幾個任務以添加和洗掉 azure DevOps 的 IP,以便呼叫您的 sqlcmd
步驟1:
steps:
- task: AzurePowerShell@5
displayName: 'Add buildserver public ip'
inputs:
azureSubscription: test
ScriptType: InlineScript
Inline: |
$ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
New-AzSqlServerFirewallRule -ResourceGroupName "group" -ServerName "database-server-name" -FirewallRuleName "azuredevops" -StartIpAddress $ip -EndIpAddress $ip
azurePowerShellVersion: LatestVersion
第 2 步:您的 Invoke-sqlcmd
步驟 3:從步驟 1 中洗掉添加的 IP
這里有一些很好的參考
解決方案2:
使用自托管代理
您自行設定和管理以運行作業的代理是自托管代理。您可以在 Azure Pipelines 或 Azure DevOps Server(以前稱為 Team Foundation Server (TFS))中使用自托管代理。自托管代理讓您可以更好地控制安裝構建和部署所需的依賴軟體。此外,機器級快取和配置在運行之間保持不變,這可以提高速度。
使用自托管代理,您將獲得不會更改的專用公共 IP,并且您可以控制 IP
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/487277.html
標籤:天蓝色 天蓝色的devops 天蓝色管道
