Я использую задачу конвейера Azure DevOps DownloadPipelineArtifact@2
https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/download-pipeline-artifact-v2?view=azure-pipelines
Эта задача загрузит артефакты другого конвейера. Существует параметр, позволяющий загружать артефакты из конвейера в другом проекте, но для конвейера в другой организации такого параметра не существует. Есть ли способ загрузить артефакты из конвейера в другой организации, при условии, что мы можем авторизоваться в этой другой организации?
Не существует доступной задачи конвейера, которую можно было бы использовать для загрузки артефактов сборки из другой организации Azure DevOps.
В качестве обходного пути вы можете попробовать использовать REST API для загрузки артефактов сборки из другой организации Azure DevOps:
Вызовите API «Артефакты — Получить артефакт», чтобы получить downloadUrl
указанного артефакта сборки.
Затем позвоните по номеру downloadUrl
, чтобы загрузить артефакт в виде ZIP-файла.
Извлеките ZIP-файл.
Ниже приведены шаги по настройке конвейера для вызова API для загрузки артефакта сборки:
Создайте PAT (токен личного доступа) в организации Azure DevOps, из которой вы хотите скачать артефакт сборки. PAT должен иметь как минимум область действия «Build (Read)
».
В конвейер, в который вы хотите загрузить артефакт, добавьте созданный выше PAT в качестве секретной переменной.
В конвейере вы можете использовать задачу PowerShell для вызова REST API для загрузки артефакта сборки.
steps:
. . .
- task: PowerShell@2
displayName: 'Download Build Artifact'
env:
MY_PAT: $(myPAT)
inputs:
pwsh: true
targetType: 'inline'
script: |
$organization = "xxx"
$project = "xxx"
$buildId = 3642
$artifactName = "drop"
$uri = "https://dev.azure.com/${organization}/${project}/_apis/build/builds/${buildId}/artifacts?artifactName=${artifactName}&api-version=7.0"
$pat = $env:MY_PAT
$base64Token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", $pat)))
$headers = @{Authorization = "Basic $base64Token"}
$downloadUrl = (Invoke-RestMethod -Method GET -Uri $uri -Headers $headers).resource.downloadUrl
$zipFilePath = "$PWD\drop.zip"
Invoke-RestMethod -Method GET -Uri $downloadUrl -Headers $headers -ContentType "application/zip" -OutFile $zipFilePath
[System.IO.Compression.ZipFile]::ExtractToDirectory( $zipFilePath, "$PWD")
Remove-Item $zipFilePath
Другой вопрос: откуда вы знаете, что нет задачи конвейера, которая поддерживает загрузку артефактов между организациями для конвейеров? Есть ли какая-то документация, подтверждающая это наверняка? Спасибо
@Athanasius, Там перечислены все встроенные задачи Azure Pipelines. Я проверил все возможные задачи загрузки артефактов, ни одна из них не имеет доступа к межорганизационным артефактам. Я также зашел на Marketplace, чтобы попробовать поискать, есть ли какие-либо расширения, которые могут обеспечить задачи конвейера для доступа к артефактам между организациями, но также не нашел никаких доступных расширений.
@Афанасий, я проверил ресурс конвейеров и ресурс сборок. Их также нет в наличии.
Спасибо за ответ, я ценю это.