#azure #azure-devops #azure-functions
#azure #azure-devops #azure-функции
Вопрос:
Я создаю задачу для загрузки последнего артефакта из другого конвейера и последовательно идентифицирую файл, чтобы выполнить автоматическую установку с помощью командной строки.
- task: DownloadPipelineArtifact@2
inputs:
source: 'specific'
project: 'TestApp'
pipeline: 'TestApp'
runVersion: 'latest'
branchName: 'refs/heads/master'
allowPartiallySucceededBuilds: true
patterns: '**/*.msi'
downloadPath: $(Build.ArtifactStagingDirectory)
- task: CmdLine@2
inputs:
script: |
cd $(Build.ArtifactStagingDirectory)/TestApp-20201015.2
TestApp.1-setup.msi /s /v
Существует ли переменная, в которой хранится имя последнего артефакта, созданного из конвейера? Вот так:
- task: CmdLine@2
inputs:
script: |
cd $(Build.ArtifactStagingDirectory)/$(latestArtifact)
$(latestInstaller).msi /s /v
Я пытался использовать $(Build.DefinitionName) или TestApp-$(Build.BuildNumber), но это не сработало. Я прошу прощения прямо сейчас, потому что я новичок в Azure, и мне трудно понять, как работают конвейеры.
Комментарии:
1. Привет @HeroNick. Я поделился шагами, чтобы получить последнее имя артефакта в ответе. Для
latest installer name
, можете ли вы поделиться тем, как вы сгенерировали это имя? Затем я перейду к более эффективному методу.
Ответ №1:
Я боюсь, что нет готовой переменной, которая могла бы представлять последние загруженные артефакты.
Но вы могли бы создать переменную в конвейере, чтобы получить имя артефактов.
Основываясь на моем тесте, при использовании Download Pipeline Artifacts task
конвейер будет генерировать переменную среды: $(DOWNLOADPIPELINEARTIFACT.BUILDNUMBER)
.
Затем вы можете использовать Powershell для запуска Rest API, чтобы получить имя артефакта.
Вот мой пример:
steps:
- powershell: |
$token = "PAT"
$url=" https://dev.azure.com/{Organization Name}/{Project Name}/_apis/build/builds/$(DOWNLOADPIPELINEARTIFACT.BUILDNUMBER)/artifacts?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$latestvalue = $response.value.name
echo $latestvalue
echo "##vso[task.setvariable variable=latest]$latestvalue"
displayName: 'PowerShell Script'
Затем вы можете создать имя переменной: $(latest)
. Его значением является имя последнего артефакта (например TestApp-20201015.2
).
Вы можете использовать переменную в следующей задаче.
cd $(Build.ArtifactStagingDirectory)/$(latest)
TestApp.1-setup.msi /s /v
Для последнего имени установщика
Вы можете жестко запрограммировать это значение. Судя по имени файла .msi, он, похоже, не связан с переменной конвейера, поэтому я не уверен, можно ли создать переменную для ее представления.
Комментарии:
1. Просто нужно было создать что-то на основе этого — может быть, лучше использовать встроенный $(System . Доступ к источнику доступа) вместо PAT?