Получить значение последнего артефакта, загруженного из другого конвейера

#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?