Skip to content

Instantly share code, notes, and snippets.

@manishtiwari25
Last active April 15, 2023 12:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save manishtiwari25/fd0f7f012455f692c26878638e48764e to your computer and use it in GitHub Desktop.
Save manishtiwari25/fd0f7f012455f692c26878638e48764e to your computer and use it in GitHub Desktop.
param(
[string]$storageAccount,
[string]$blobContainer,
[string]$instanceName,
[string]$databaseName,
[string]$storageKey
)
import-module sqlps;
$sqlPath = "sqlserver:\sql\$($env:COMPUTERNAME)"
$credentialName = "backupCredential-$(Get-Random)"
$backupFile = "AxDB_PAR_$(Get-Date -Format yyyy_MM_dd_HH_mm_ss).bak"
$path = "$($sqlPath)\$($instanceName)\credentials"
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/$($backupFile)"
$removePath = "$($path)\$($credentialName)"
$secureString = ConvertTo-SecureString $storageKey -AsPlainText -Force
try {
Set-Location $sqlPath
$secureString = ConvertTo-SecureString $storageKey -AsPlainText -Force
Write-Host "Generate credential: " $credentialName
New-SqlCredential -Name $credentialName -Identity $storageAccount -Secret $secureString -Path $path -ea Stop | Out-Null
Write-Host "Backup database: " $backupUrlContainer
Backup-SqlDatabase -Database $databaseName -Path $path -SqlCredential $credentialName -BackupFile $backupUrlContainer -BackupAction Database -NoRewind -BackupSetName "AxDB-Full Database Backup" -CompressionOption On
Write-Host "Remove credential: " $credentialName
Remove-SqlCredential -Path $removePath -ea Stop | Out-Null
}catch{ Write-Host $_.Exception.Message }
Write-Host "Done"
trigger: none
pool:
vmImage: ubuntu-latest
variables:
- group: Database-Backup
steps:
- task: AzureCLI@2
displayName: Start the VM
inputs:
azureSubscription: $(AZVMServiceConnection)
scriptType: pscore
scriptLocation: inlineScript
inlineScript: az vm start -g $(VMResourceGroup) -n $(VMName)
- task: AzureCLI@2
name: storageKeyTask
displayName: Fetch Storage Account Key
inputs:
azureSubscription: $(AZBackupServiceConnection)
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
$storageKey = az storage account keys list -g $(StorageAccountResourceGroup) -n $(StorageAccount) --query [0].value
echo "##vso[task.setvariable variable=storageSecretKey;issecret=true]$storageKey"
- task: AzureCLI@2
displayName: Run VM Command
inputs:
azureSubscription: $(AZVMServiceConnection)
scriptType: pscore
scriptLocation: inlineScript
inlineScript: az vm run-command invoke --command-id RunPowerShellScript -g $(VMResourceGroup) -n $(VMName) --scripts '@database-backup.ps1' --parameters 'storageAccount=$(StorageAccount)' 'blobContainer=$(BlobContainer)' 'instanceName=$(InstanceName)' 'databaseName=$(DatabaseName)' 'storageKey=$(storageSecretKey)'
- task: AzureCLI@2
displayName: Stop the VM
continueOnError: true
inputs:
azureSubscription: $(AZVMServiceConnection)
scriptType: pscore
scriptLocation: inlineScript
inlineScript: az vm deallocate -g $(VMResourceGroup) -n $(VMName)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment