2017-04-12 69 views
0

爲了運行我的驗收測試,我需要在SQL Azure上運行的數據庫上定義一個已知的良好狀態。我的測試在本地運行良好,並已設置連接字符串以更新Azure PaaS上的SQL實例。測試將在使用VSTS部署數據庫之後運行。爲了讓部署過程運行我的認證測試,我需要運行Visual Studio團隊系統測試的過程才能訪問數據庫。 VSTS顯然運行在美國東部的Azure區域。鑑於潛在的數百個IP地址需要列入白名單,是否有更安全的方法來執行此操作,獲取部署過程的IP地址,然後將此IP地址作爲部署的一部分訪問數據庫?允許VSTS更新測試數據庫

+0

啓用允許腳本訪問OAuth令牌以進行發佈後會出現什麼結果? –

回答

2

您可以撥打New-AzureRmSqlServerFirewallRuleRemove-AzureRmSqlServerFirewallRule powershell command來添加和刪除防火牆規則。

請參考下面這些線程構建/釋放過程中做到這一點:Deploy Dacpac packages via power shell script to Azure SQL Server

首先,你需要添加防火牆規則,以便連接到SQL Azure的服務器 。

1.Edit您的構建定義

2.Select選項選項卡,並選中允許腳本訪問OAuth令牌

3.添加Azure的PowerShell的步驟(參數:-RestAddress https://[account].vsdtl.visualstudio.com/DefaultCollection/_apis/vslabs/ipaddress -Token $(系統。的accessToken)-RG [資源組] - 服務器[服務器名稱] -ruleName $(Build.BuildNumber)

代碼:

param (
    [string]$RestAddress, 
    [string]$Token, 
    [string]$RG, 
    [string]$Server 
    ) 
$basicAuth = ("{0}:{1}" -f 'test',$Token) 
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth) 
$basicAuth = [System.Convert]::ToBase64String($basicAuth) 
$headers = @{Authorization=("Basic {0}" -f $basicAuth)} 
$result = Invoke-RestMethod -Uri $RestAddress -headers $headers -Method Get 
Write-Host $result.value 
New-AzureRmSqlServerFirewallRule -ResourceGroupName $RG -ServerName $Server -FirewallRuleName "UnitTestRule" -StartIpAddress "$($result.value)" -EndIpAddress "$($result.value)" 

更新:

允許腳本訪問OAuth令牌發佈:

  1. 編輯發佈定義
  2. 單擊運行在代理
  3. 檢查允許腳本訪問OAuth令牌選項

enter image description here

+0

嗨,我需要運行它作爲我的部署的一部分。我已經完成了你所說的內容,但是它失敗了,'System.AccessToken'這個詞不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。我認爲,因爲我已經勾選了「允許腳本訪問OAuth令牌」,而不是發佈。無論如何要在發佈時做到這一點?我認爲我需要sql服務器纔可以授予防火牆訪問權限? – johnstaveley

+0

@johnstaveley 1.編輯發佈定義 2.單擊在代理上運行 3.檢查允許腳本訪問OAuth令牌選項 我更新了我的答案。 –

+0

我遇到了一個問題,但Azure給了你一個可憐的限制PowerShell腳本的長度,你可以運行它導致調試問題 – johnstaveley