From f739d2a7cf575682b69bbd9952943a23c45764fb Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Mon, 8 Jun 2020 16:52:45 -0700 Subject: [PATCH] Check if Azure Blob exists before overwritting --- .../releaseBuild/azureDevOps/releaseBuild.yml | 14 +++++++ .../templates/checkAzureContainer.yml | 37 +++++++++++++++++++ .../azureDevOps/templates/linux.yml | 2 + .../azureDevOps/templates/mac.yml | 2 + .../templates/windows-hosted-build.yml | 3 +- 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 tools/releaseBuild/azureDevOps/templates/checkAzureContainer.yml diff --git a/tools/releaseBuild/azureDevOps/releaseBuild.yml b/tools/releaseBuild/azureDevOps/releaseBuild.yml index 80a2bdd7563..803dd01c90f 100644 --- a/tools/releaseBuild/azureDevOps/releaseBuild.yml +++ b/tools/releaseBuild/azureDevOps/releaseBuild.yml @@ -20,48 +20,62 @@ resources: clean: true jobs: +- template: templates/checkAzureContainer.yml + - template: templates/linux.yml parameters: buildName: deb + parentJob: DeleteBlob - template: templates/linux.yml parameters: buildName: rpm uploadDisplayName: Upload and Sign + parentJob: DeleteBlob - template: templates/linux.yml parameters: buildName: fxdependent + parentJob: DeleteBlob - template: templates/linux.yml parameters: buildName: alpine + parentJob: DeleteBlob - template: templates/mac.yml + parameters: + parentJob: DeleteBlob - template: templates/windows-hosted-build.yml parameters: Architecture: x64 + parentJob: DeleteBlob - template: templates/windows-hosted-build.yml parameters: Architecture: x86 + parentJob: DeleteBlob - template: templates/windows-hosted-build.yml parameters: Architecture: arm + parentJob: DeleteBlob - template: templates/windows-hosted-build.yml parameters: Architecture: arm64 + parentJob: DeleteBlob - template: templates/windows-hosted-build.yml parameters: Architecture: fxdependent + parentJob: DeleteBlob - template: templates/windows-hosted-build.yml parameters: Architecture: fxdependentWinDesktop + parentJob: DeleteBlob - template: templates/windows-packaging.yml parameters: diff --git a/tools/releaseBuild/azureDevOps/templates/checkAzureContainer.yml b/tools/releaseBuild/azureDevOps/templates/checkAzureContainer.yml new file mode 100644 index 00000000000..1e8341c8258 --- /dev/null +++ b/tools/releaseBuild/azureDevOps/templates/checkAzureContainer.yml @@ -0,0 +1,37 @@ +jobs: +- job: DeleteBlob + displayName: Delete blob is exists + pool: + vmImage: windows-latest + steps: + - template: SetVersionVariables.yml + parameters: + ReleaseTagVar: $(ReleaseTagVar) + + - task: AzurePowerShell@4 + inputs: + azureSubscription: '$(AzureFileCopySubscription)' + scriptType: inlineScript + azurePowerShellVersion: latestVersion + inline: | + try { + $container = Get-AzStorageContainer -Container '$(AzureVersion)' -Context (New-AzStorageContext -StorageAccountName '$(StorageAccount)') -ErrorAction Stop + + if ($container -ne $null -and '$(ForceAzureBlobDelete)' -eq 'false') { + throw 'Azure blob container $(AzureVersion) already exists. To overwrite, use ForceAzureBlobDelete parameter' + } + elseif ($container -ne $null -and '$(ForceAzureBlobDelete)' -eq 'true') { + Write-Verbose -Verbose 'Removing container $(AzureVersion) due to ForceAzureBlobDelete parameter' + Remove-AzStorageContainer -Name '$(AzureVersion)' -Context (New-AzStorageContext -StorageAccountName '$(StorageAccount)') -Force + } + } + catch { + if ($_.FullyQualifiedErrorId -eq 'ResourceNotFoundException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageContainerCommand') { + Write-Verbose -Verbose 'Container "$(AzureVersion)" does not exists.' + } + else { + throw $_ + } + } + + diff --git a/tools/releaseBuild/azureDevOps/templates/linux.yml b/tools/releaseBuild/azureDevOps/templates/linux.yml index 5949d12bd79..96a1a2ff9a6 100644 --- a/tools/releaseBuild/azureDevOps/templates/linux.yml +++ b/tools/releaseBuild/azureDevOps/templates/linux.yml @@ -1,12 +1,14 @@ parameters: buildName: '' uploadDisplayName: 'Upload' + parentJob: '' jobs: - job: build_${{ parameters.buildName }} displayName: Build ${{ parameters.buildName }} condition: succeeded() pool: Hosted Ubuntu 1604 + dependsOn: ${{ parameters.parentJob }} variables: build: ${{ parameters.buildName }} steps: diff --git a/tools/releaseBuild/azureDevOps/templates/mac.yml b/tools/releaseBuild/azureDevOps/templates/mac.yml index 91f1935c220..e586ab2829a 100644 --- a/tools/releaseBuild/azureDevOps/templates/mac.yml +++ b/tools/releaseBuild/azureDevOps/templates/mac.yml @@ -1,11 +1,13 @@ parameters: jobName: 'build_macOS' + parentJob: '' jobs: - job: ${{ parameters.jobName }} displayName: Build macOS condition: succeeded() pool: Hosted Mac Internal + dependsOn: ${{ parameters.parentJob }} variables: # Turn off Homebrew analytics HOMEBREW_NO_ANALYTICS: 1 diff --git a/tools/releaseBuild/azureDevOps/templates/windows-hosted-build.yml b/tools/releaseBuild/azureDevOps/templates/windows-hosted-build.yml index 594513ea225..412a5d13f27 100644 --- a/tools/releaseBuild/azureDevOps/templates/windows-hosted-build.yml +++ b/tools/releaseBuild/azureDevOps/templates/windows-hosted-build.yml @@ -2,11 +2,12 @@ parameters: BuildConfiguration: release BuildPlatform: any cpu Architecture: x64 - + parentJob: '' jobs: - job: build_windows_${{ parameters.Architecture }} displayName: Build Windows - ${{ parameters.Architecture }} condition: succeeded() + dependsOn: ${{ parameters.parentJob }} pool: vmImage: windows-latest variables: