Skip to content

Commit 07b459c

Browse files
committed
Merged PR 28448: [release/v7.3.10]Copy azure blob with PowerShell global tool to private blob and move to CDN during release
Backport #20659
1 parent 7337cfb commit 07b459c

4 files changed

Lines changed: 106 additions & 17 deletions

File tree

tools/releaseBuild/azureDevOps/releasePipeline.yml

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ stages:
290290
Update and merge the changelog for the release.
291291
This step is required for creating GitHub draft release.
292292
293-
- stage: GitHubDraftRelease
294-
displayName: Create GitHub draft release
293+
- stage: BlobPublic
294+
displayName: Make Blob Public
295295
# do not include stages that are likely to fail in dependency as there is no way to force deploy.
296296
dependsOn: UpdateChangeLog
297297

@@ -314,6 +314,38 @@ stages:
314314
steps:
315315
- template: templates/release-MakeContainerPublic.yml
316316

317+
- template: templates/release/approvalJob.yml
318+
parameters:
319+
displayName: Copy Global tool packages to PSInfra storage
320+
jobName: CopyBlobApproval
321+
instructions: |
322+
Approval for Copy global tool packages to PSInfra storage
323+
324+
- job: PSInfraBlobPublic
325+
displayName: Copy global tools to PSInfra storage
326+
dependsOn: CopyBlobApproval
327+
328+
pool:
329+
name: PowerShell1ES
330+
demands:
331+
- ImageOverride -equals PSMMS2019-Secure
332+
333+
variables:
334+
- group: 'PSInfraStorage'
335+
336+
steps:
337+
- template: templates/release-CopyGlobalTools.yml
338+
parameters:
339+
sourceContainerName: 'tool-private'
340+
destinationContainerName: 'tool'
341+
sourceStorageAccountName: '$(GlobalToolStorageAccount)'
342+
destinationStorageAccountName: '$(PSInfraStorageAccount)'
343+
blobPrefix: '$(Version)'
344+
345+
- stage: GitHubTasks
346+
displayName: GitHub tasks
347+
dependsOn: BlobPublic
348+
jobs:
317349
- job: GitHubDraft
318350
displayName: Create GitHub Draft release
319351

@@ -326,28 +358,24 @@ stages:
326358
- group: 'Azure Blob variable group'
327359
- group: 'AzDevOpsArtifacts'
328360
- group: ReleasePipelineSecrets
329-
dependsOn: AzureBlobPublic
330361
steps:
331362
- template: templates/release-CreateGitHubDraft.yml
332363

333-
- stage: GitHubManualTasks
334-
displayName: GitHub manual tasks
335-
dependsOn: GitHubDraftRelease
336-
jobs:
337364
- deployment: PushTag
365+
dependsOn: GitHubDraft
338366
displayName: Push Git Tag
339367
pool : server
340368
environment: PSReleasePushTag
341369

342370
- deployment: MakeDraftPublic
371+
dependsOn: PushTag
343372
displayName: Make GitHub Draft public
344373
pool : server
345374
environment: PSReleaseDraftPublic
346-
dependsOn: PushTag
347375

348376
- stage: PublishPackages
349377
displayName: Publish packages
350-
dependsOn: GitHubManualTasks
378+
dependsOn: GitHubTasks
351379
jobs:
352380
- job: PublishNuget
353381

@@ -405,7 +433,7 @@ stages:
405433
- stage: ReleaseDocker
406434
displayName: Release Docker
407435
dependsOn:
408-
- GitHubManualTasks
436+
- GitHubTasks
409437
jobs:
410438
- deployment: ReleaseDocker
411439
displayName: Release Docker
@@ -504,7 +532,7 @@ stages:
504532
Notify the PM team to start the process of releasing to MU.
505533
506534
- stage: UpdateDotnetDocker
507-
dependsOn: GitHubManualTasks
535+
dependsOn: GitHubTasks
508536
displayName: Update DotNet SDK Docker images
509537
jobs:
510538
- template: templates/release/approvalJob.yml
@@ -519,7 +547,7 @@ stages:
519547
4. create PR targeting nightly branch
520548
521549
- stage: UpdateWinGet
522-
dependsOn: GitHubManualTasks
550+
dependsOn: GitHubTasks
523551
displayName: Add manifest entry to winget
524552
jobs:
525553
- template: templates/release/approvalJob.yml
@@ -530,7 +558,7 @@ stages:
530558
This is typically done by the community 1-2 days after the release.
531559
532560
- stage: PublishMsix
533-
dependsOn: GitHubManualTasks
561+
dependsOn: GitHubTasks
534562
displayName: Publish MSIX to store
535563
jobs:
536564
- template: templates/release/approvalJob.yml
@@ -541,7 +569,7 @@ stages:
541569
Ask Steve to release MSIX bundle package to Store
542570
543571
- stage: BuildInfoJson
544-
dependsOn: GitHubManualTasks
572+
dependsOn: GitHubTasks
545573
displayName: Upload BuildInfoJson
546574
jobs:
547575
- deployment: UploadJson
@@ -562,7 +590,7 @@ stages:
562590
- template: templates/release-BuildJson.yml
563591

564592
- stage: ReleaseVPack
565-
dependsOn: GitHubManualTasks
593+
dependsOn: GitHubTasks
566594
displayName: Release VPack
567595
jobs:
568596
- job: KickoffvPack
@@ -611,7 +639,7 @@ stages:
611639
}
612640
613641
- stage: ReleaseDeps
614-
dependsOn: GitHubManualTasks
642+
dependsOn: GitHubTasks
615643
displayName: Update pwsh.deps.json links
616644
jobs:
617645
- template: templates/release-UpdateDepsJson.yml

tools/releaseBuild/azureDevOps/templates/nuget.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ jobs:
269269
azureSubscription: '$(GlobalToolSubscription)'
270270
Destination: AzureBlob
271271
storage: '$(GlobalToolStorageAccount)'
272-
ContainerName: 'tool'
272+
ContainerName: 'tool-private'
273273
blobPrefix: '$(Version)'
274274
condition: and(succeeded(), eq(variables['SHOULD_SIGN'], 'true'))
275275

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
parameters:
2+
- name: sourceContainerName
3+
type: string
4+
default: 'source-container'
5+
6+
- name: destinationContainerName
7+
type: string
8+
default: 'destination-container'
9+
10+
- name: sourceStorageAccountName
11+
type: string
12+
default: 'source-storage-account'
13+
14+
- name: destinationStorageAccountName
15+
type: string
16+
default: 'destination-storage-account'
17+
18+
- name: blobPrefix
19+
type: string
20+
default: '$(Version)'
21+
22+
steps:
23+
- template: release-SetReleaseTagAndContainerName.yml
24+
25+
- pwsh: |
26+
Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1'
27+
Install-AzCopy
28+
displayName: Install AzCopy
29+
retryCountOnTaskFailure: 2
30+
31+
- pwsh: |
32+
Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1'
33+
$azcopy = Find-AzCopy
34+
Write-Verbose -Verbose "Found AzCopy: $azcopy"
35+
36+
$sourceContainerName = "${{ parameters.sourceContainerName }}"
37+
$destinationContainerName = "${{ parameters.destinationContainerName }}"
38+
$sourceStorageAccountName = "${{ parameters.sourceStorageAccountName }}"
39+
$destinationStorageAccountName = "${{ parameters.destinationStorageAccountName }}"
40+
$blobPrefix = "${{ parameters.blobPrefix }}"
41+
42+
$sourceBlobUrl = "https://${sourceStorageAccountName}.blob.core.windows.net/${sourceContainerName}/${blobPrefix}"
43+
Write-Verbose -Verbose "Source blob url: $sourceBlobUrl"
44+
$destinationBlobUrl = "https://${destinationStorageAccountName}.blob.core.windows.net/${destinationContainerName}"
45+
Write-Verbose -Verbose "Destination blob url: $destinationBlobUrl"
46+
47+
& $azcopy cp $sourceBlobUrl $destinationBlobUrl --recursive
48+
49+
$packagesPath = Get-ChildItem -Path $(System.ArtifactsDirectory)\*.deb -Recurse -File | Select-Object -First 1 -ExpandProperty DirectoryName
50+
Write-Host "sending -- vso[task.setvariable variable=PackagesRoot]$packagesPath"
51+
Write-Host "##vso[task.setvariable variable=PackagesRoot]$packagesPath"
52+
53+
displayName: Copy blobs
54+
retryCountOnTaskFailure: 2
55+
env:
56+
AZCOPY_AUTO_LOGIN_TYPE: MSI

tools/releaseBuild/azureDevOps/templates/release-SetReleaseTagAndContainerName.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@ steps:
1818
$vstsCommandString = "vso[task.setvariable variable=AzureVersion]$azureVersion"
1919
Write-Host "sending " + $vstsCommandString
2020
Write-Host "##$vstsCommandString"
21+
22+
$version = '$(ReleaseTag)'.ToLowerInvariant().Substring(1)
23+
$vstsCommandString = "vso[task.setvariable variable=Version]$version"
24+
Write-Host ("sending " + $vstsCommandString)
25+
Write-Host "##$vstsCommandString"
2126
displayName: Set container name

0 commit comments

Comments
 (0)