发布管道 - 在 docker 个阶段之间共享工件
Release pipeline - share Artifacts between docker stages
我有以下 Azure 发布管道:
阶段 1 运行 docker 图像,产生一些结果,例如 results1.json
阶段 2 运行一个 docker 图像,产生一些结果,比如 results2.json
现在,第 3 阶段(也是 docker 图片)将等待前两个阶段完成,并同时使用 results1.json 和 results2.json 文件来做其他事情。
如有任何建议,我们将不胜感激。
您可以在第 1 阶段和第 2 阶段的 ##vso[task.uploadfile]
下面的 运行 添加 powershell 任务,以将 json 文件上传到任务日志,该任务日志可与任务一起下载日志。
您可能首先需要将 json 文件保存到代理上的某个位置。例如将 json 文件保存到文件夹 $(System.DefaultWorkingDirectory)
舞台 1
运行 powershell 任务中的脚本下方
echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results1.json"
舞台 2
echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results2.json"
舞台3
添加一个 powershell 任务来调用 release log rest api 以获取日志并保存到代理上的某个位置(例如 $(System.DefaultWorkingDirectory)).
GET https://{instance}/{collection}/{project}/_apis/release/releases/{releaseId}/logs?api-version=4.1-preview.2
然后使用 powershell 从下载的日志中提取 results1.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()
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
我有以下 Azure 发布管道:
阶段 1 运行 docker 图像,产生一些结果,例如 results1.json 阶段 2 运行一个 docker 图像,产生一些结果,比如 results2.json
现在,第 3 阶段(也是 docker 图片)将等待前两个阶段完成,并同时使用 results1.json 和 results2.json 文件来做其他事情。
如有任何建议,我们将不胜感激。
您可以在第 1 阶段和第 2 阶段的 ##vso[task.uploadfile]
下面的 运行 添加 powershell 任务,以将 json 文件上传到任务日志,该任务日志可与任务一起下载日志。
您可能首先需要将 json 文件保存到代理上的某个位置。例如将 json 文件保存到文件夹 $(System.DefaultWorkingDirectory)
舞台 1
运行 powershell 任务中的脚本下方
echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results1.json"
舞台 2
echo "##vso[task.uploadfile]$(System.DefaultWorkingDirectory)\results2.json"
舞台3
添加一个 powershell 任务来调用 release log rest api 以获取日志并保存到代理上的某个位置(例如 $(System.DefaultWorkingDirectory)).
GET https://{instance}/{collection}/{project}/_apis/release/releases/{releaseId}/logs?api-version=4.1-preview.2
然后使用 powershell 从下载的日志中提取 results1.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()
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