Как передать вывод одной задачи сборки в другие задачи сборки в Azure DevOps - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть две задачи сборки в Azure Конвейеры сборки DevOps, одна задача Checkmarx, другая RestCall. Мне нужно передать информацию об уязвимостях (например: High = 20, Medium = 100 и Low = 200) из задачи Checkmarx в задачу RestCall.

В настоящее время я использовал приведенный ниже код сценария для установки выходных переменных.

$High= [Checkmarx task output details]
$Medium= [Checkmarx task output details]
$Low= [Checkmarx task output details]
Write-Host "##vso[task.setvariable variable=high]$High"
Write-Host "##vso[task.setvariable variable=medium]$Medium"
Write-Host "##vso[task.setvariable variable=low]$Low"

1 Ответ

0 голосов
/ 21 апреля 2020

Я немного боюсь, что это лучшее, что ты можешь сделать. Если ваша цель состоит в том, чтобы установить переменную за один шаг, а продолжить за другой.

Вы также можете проверить Совместное использование переменных по конвейерам

Например:

steps:
- task: MyTask@1  # this step generates the output variable
  name: ProduceVar  # because we're going to depend on it, we need to name the step
- script: echo $(ProduceVar.MyVar) # this step uses the output variable

Вы также можете рассмотреть переменные нескольких заданий, если это соответствует вашим потребностям:

jobs:

# Set an output variable from job A
- job: A
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the value"
    name: setvarStep
  - script: echo $(setvarStep.myOutputVar)
    name: echovar

# Map the variable into job B
- job: B
  dependsOn: A
  pool:
    vmImage: 'ubuntu-16.04'
  variables:
    myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ]  # map in the variable
                                                                          # remember, expressions require single quotes
  steps:
  - script: echo $(myVarFromJobA)
    name: echovar

РЕДАКТИРОВАТЬ Если вы хотите получить выходные данные данного шага, вы можете использовать Azure DevOps Rest API. Ниже вы найдете пример:

trigger:
  branches:
    include:
      - master
  paths:
    include:
      - stackoverflow/07-call-to-azure-devops-from-pipeline/*

variables: 
- name: 'devopsAccount' # new variable defined in YAML
  value: 'thecodemanual'
- name: 'projectName' # new variable defined in YAML
  value: 'DevOps Manual'

steps:
- bash: ls $(Build.SourcesDirectory)
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
        # Encode the Personal Access Token (PAT)
        $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(System.AccessToken)")) }

        # Get a list of releases
        $uri = "https://dev.azure.com/$(devopsAccount)/$(projectName)/_apis/build/builds/$(Build.BuildId)/logs/6?api-version=5.1"

        Write-Host $uri

        # Invoke the REST call
        $result = Invoke-RestMethod -Uri $uri -Method Get -Headers $AzureDevOpsAuthenicationHeader

        Write-Host $result
        Write-Host "##vso[task.setvariable variable=high]$result"

То, что вы должны установить sh, - это идентификатор журнала. Обратите внимание, что я использовал 6 для моего 1 шага. Это связано с тем, что в начале некоторые шаги для system-pre-steps.yml выполняются как загрузка исходного кода et c. Для этого примера я распечатал результат. Пожалуйста, посмотрите на это:

Logs from Azure DevOps step

...