Matthewek
Matthewek

Reputation: 1559

Release pipeline - share Artifacts between docker stages

I have following azure release pipeline:

enter image description here

Stage 1 runs a docker image, that produces some results, say results1.json Stage 2 runs a docker image, that produces some results, say results2.json

Now, stage 3 (also docker image) will wait for first two stages to complete, and use both results1.json and results2.json files to do something else.

Any suggestions would be appreciated.

Upvotes: 0

Views: 120

Answers (1)

Levi Lu-MSFT
Levi Lu-MSFT

Reputation: 30353

You can add a powershell task to run below ##vso[task.uploadfile] in both stage1 and stage2 to upload the json fils to the task log which is available to download along with the task log.

You may first need to save the json files to a place on the agent. For example save the json file to folder $(System.DefaultWorkingDirectory)

on stage1

run below script in the powershell task

echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results1.json"

on stage2

echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results2.json"

On stage3

Add a powershell task to call release log rest api to get the logs and save to a place on the agent(eg.$(System.DefaultWorkingDirectory)).

GET https://{instance}/{collection}/{project}/_apis/release/releases/{releaseId}/logs?api-version=4.1-preview.2

Then use powershell to extract results1.json and results2.json files from the downloaded logs.

Please refer to below full powershell scripts:

$url =  "https://vsrm.dev.azure.com/<Org>/<Proj>/_apis/release/releases/$(Release.ReleaseId)/logs?api-version=5.1-preview.2"
$filename="$(System.DefaultWorkingDirectory)\filefinal.zip"
Invoke-RestMethod -Uri $url -Headers @{Authorization="Bearer $env:SYSTEM_ACCESSTOKEN"} -Method get -OutFile $filename

# extract results1.json and results2.json 

$sourceFile="$filename"
$file1= "$(System.DefaultWorkingDirectory)\results1.json"
$file2 = "$(System.DefaultWorkingDirectory)\results2.json"

Add-Type -Assembly System.IO.Compression.FileSystem
$zip = [IO.Compression.ZipFile]::OpenRead($sourceFile)
$zip.Entries | where {$_.Name -match 'results1.json'} | foreach {[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $file1, $true)}

$zip.Entries | where {$_.Name -match 'results2.json'} | foreach {[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $file2, $true)}
$zip.Dispose()

If you encounter not authorized error in the powershell task on stage3. Please refere to blow screenshot and check Allow scripts to access the OAuth token

enter image description here

Upvotes: 2

Related Questions