Артефакт универсального пакета — использование представления пакета в конвейере

#azure-devops #azure-devops-pipelines

#azure-devops #azure-devops-конвейеры

Вопрос:

У меня есть конвейер выпуска, который запускается всякий раз, когда публикуется новая версия универсального пакета. Теперь, поскольку мой пакет может быть повышен до определенного представления (по умолчанию @local, @prereleas или @release), я хотел бы использовать выбранное представление в пользовательском условии для последующих шагов в моем конвейере.

Что-то вроде :

eq($(hopefullysomepredefinedvar), ‘@prerelease’)

Тем не менее, я проверил доступные предопределенные переменные, и информация о «представлении», похоже, недоступна, если я что-то не пропустил.

Вероятно, еще более чистым решением было бы использовать отдельные этапы в конвейере выпуска и оценивать «представление» с помощью некоторого условия перед развертыванием, но я не нашел способа сделать это.

Наконец, я попытался добавить один и тот же артефакт (универсальный пакет) несколько раз, с разными «представлениями» для «фильтрации». Итак, один раз с view @prerelease и один раз с view @release. Однако, похоже, что мой конвейер вообще не запускается при такой конфигурации.

Есть ли решение (или хороший обходной путь) для этого?

Спасибо!

Комментарии:

1. Не удается получить последнюю информацию. Просто хотите проверить, полезен ли для вас приведенный ниже ответ? Если да, вы можете принять ответ , который также может быть полезен для других, у кого такая же головоломка, и мы могли бы заархивировать эту тему. Кроме того, не стесняйтесь оставлять комментарии ниже, если у вас все еще есть какие-либо вопросы по этому поводу:-) Хорошего дня.

Ответ №1:

В качестве обходного пути вы можете написать скрипт через rest api для оценки представления пакета. Если существует представление с именем Prerelease , задайте condition переменной значение true .

 GET https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/Packages/{packageId}/versions/{packageVersionId}?api-version=6.0-preview.1
 

Пример сценария:

 $url = 'GET https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/Packages/{packageId}/versions/{packageVersionId}?api-version=6.0-preview.1';
$token = "PAT"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))   

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json 

$results = $response.views.name
       
foreach($view in $response.views){
    
        if($view.name -eq "Prerelease"){   
            $condition = "true"          
       }
}

Write-Host "results = $($results | ConvertTo-Json -Depth 100)"
Write-Host "result = $condition"
 

Затем вы можете задать пользовательское условие следующим eq($(condition), true) образом.

Второй обходной путь:

Добавьте несколько источников артефактов, а затем укажите псевдоним источника, как показано ниже:

введите описание изображения здесь

Мы можем использовать Release.TriggeringArtifact.Alias переменную по умолчанию, чтобы получить псевдоним артефакта, который вызвал выпуск в условии для оценки представления.

Например: condition: contains(variables['Release.TriggeringArtifact.Alias'], '@prerelease' ))

Комментарии:

1. Afaik API предполагает, что я знаю номер версии, верно? В артефакте конвейера выпуска, который запускает конвейер, я просто указываю «Последний», и, кажется, я помню, что где-то читал, что API этого не поддерживает.

2. I just specify 'Latest' Вы можете попробовать этот api . По умолчанию используется последняя версия.

3. хорошо, я попробую. Я только что понял, что у меня также есть версия, которая запускала конвейер из переменных артефактов запуска, например [BUILD_BUILDID] —> [0.5.0], так что я мог бы даже передать это в API.

4. Вызов API работает нормально. Единственная проблема с этим подходом заключается в том, что если я удалю «фильтр представления» из триггера артефакта, конвейер запускается только при публикации новой версии пакета, а не при продвижении версии до определенного представления.

5. Если вы хотите, чтобы конвейер запускался при продвижении версии до определенного представления, почему вы удаляете view ‘filter’ из триггера артефакта? Кроме того, я добавил в ответ еще одно обходное решение, пожалуйста, просмотрите его.