我有以下天蓝色发布管道:
第1阶段运行一个docker映像,该映像会产生一些结果,例如 results1.json 第2阶段运行docker映像,该映像会产生一些结果,例如 results2.json
现在,第3阶段(也是docker映像)将等待前两个阶段完成,并同时使用 results1.json 和 results2。 json 文件来执行其他操作。
任何建议将不胜感激。
答案 0 :(得分:1)
您可以在阶段1和阶段2中添加一个在##vso[task.uploadfile]
下运行的powershell任务,以将json fils上传到任务日志,该日志可与任务日志一起下载。
您可能首先需要将json文件保存到代理上的某个位置。例如,将json文件保存到文件夹$(System.DefaultWorkingDirectory)
在stage1上
在powershell任务中的脚本下面运行
echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results1.json"
在stage2上
echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results2.json"
在stage3上
添加一个powershell任务来调用release log rest api以获取日志并将其保存到代理中的某个位置(例如$(System.DefaultWorkingDirectory))。
GET https://{instance}/{collection}/{project}/_apis/release/releases/{releaseId}/logs?api-version=4.1-preview.2
然后使用powershell从下载的日志中提取result1.json和results2.json文件。
请参考以下完整的powershell脚本:
$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()
如果在stage3的powershell任务中遇到未授权的错误。请参阅打击屏幕截图,然后检查允许脚本访问OAuth令牌