发布管道-在Docker阶段之间共享工件

时间:2019-12-09 14:34:51

标签: azure docker continuous-integration azure-pipelines azure-pipelines-release-pipeline

我有以下天蓝色发布管道:

enter image description here

第1阶段运行一个docker映像,该映像会产生一些结果,例如 results1.json 第2阶段运行docker映像,该映像会产生一些结果,例如 results2.json

现在,第3阶段(也是docker映像)将等待前两个阶段完成,并同时使用 results1.json results2。 json 文件来执行其他操作。

任何建议将不胜感激。

1 个答案:

答案 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令牌

enter image description here

相关问题