powershell - Despliegue los paquetes de Dacpac a través de la secuencia de comandos Power Shell a Azure SQL Server
azure-sql-database vsts (1)
Estoy tratando de implementar múltiples dacpac durante el proceso de compilación único mediante el uso de secuencias de comandos de PowerShell.
param(
[string]$publish_profile,
[string]$path_to_snapshots,
[string]$password
)
#Load Microsoft.SqlServer.Dac assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Dac")
#Load Dac profile
$dacProfile = [Microsoft.SqlServer.Dac.DacProfile]::Load($publish_profile)
$dacService = new-object Microsoft.SqlServer.Dac.DacServices($dacProfile.TargetConnectionString)
$files = Get-ChildItem "$path_to_snapshots/*.dacpac"
foreach ($file in $files)
{
$fileName = $file.Name
Try
{
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($file.FullName)
$dacService.Deploy($dp, $database, $true)
}
}
Catch
{
Write-Host "$fileName deployment has been failed" -foregroundcolor "red"
throw $_.Exception;
Break
}
}
En mi entorno local, todo funciona bien, pero durante el proceso de compilación en los servicios del equipo de Visual Studio recibo un error:
2017-02-24T06: 03: 09.7955300Z *********. La implementación de dacpac ha fallado
2017-02-24T06: 03: 09.9785258Z ## [error] Llamada de excepción "Implementar" con "3" argumento (s): "No se pudo implementar el paquete".
En D: / a / 1 / s ******************** / deploydatabase.ps1: 104 char: 13
+ $ dacService.Deploy ($ dp, $ database, $ true)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId: DacServicesException2017-02-24T06: 03: 10.0085256Z ## [error] Proceso completado con el código de salida 1 y con 1 error (es) escritos en la secuencia de error.
En primer lugar, debe agregar una regla de firewall para conectarse a Azure SQL Server.
- Edita tu definición de construcción
- Seleccione la pestaña Opción y marque Permitir que los scripts accedan al token OAuth
- Agregue el paso de Azure PowerShell (argumentos: -RestAddress https: // [cuenta] .vsdtl.visualstudio.com / DefaultCollection / _apis / vslabs / ipaddress -Token $ (System.AccessToken) -RG [grupo de recursos] -Servidor [nombre del servidor] -ruleName $ (Build.BuildNumber)
Código:
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)"
En segundo lugar, le recomiendo que use el ensamblado en este paquete: Microsoft.SqlServer.Dac .
En tercer lugar, para obtener el error de detalle, puede usar este código en su lugar:
Catch
{
Write-Host "$fileName deployment has been failed" -foregroundcolor "red"
$Error | format-list -force
Write-Host $Error[0].Exception.ParentContainsErrorRecordException;
Break
}
Por otro lado, le recomiendo que pueda implementar el paquete SQL a través de SqlPackage.exe .