Поделиться через


Интерфейс командной строки Azure DevOps в Azure Pipeline YAML

Azure DevOps Services

Если вы хотите использовать Azure DevOps CLI с конвейером YAML, можно использовать расширение Azure DevOps или использовать задачу AzureCLI. Агенты Windows и Linux, размещенные в Майкрософт, предварительно настроены с помощью Azure CLI и расширения Azure DevOps CLI. CLI расширения Azure DevOps выполняет az devops команды.

Вы можете пройти проверку подлинности с помощью PAT или использовать задачу AzureCLI@2 с подключением к службе. Использование подключения к службе является более безопасным вариантом, так как вам не нужно вручную управлять учетными данными.

Проверка подлинности с помощью Azure DevOps

Некоторые команды Azure DevOps CLI, например az devops configure и az devops --helpне требуют проверки подлинности. Они не подключаются к Azure DevOps. Большинство команд взаимодействуют с Azure DevOps и требуют проверки подлинности.

Вы можете пройти проверку подлинности с помощью маркера безопасности System.AccessToken , используемого запущенным конвейером, назначив его переменной среды с именем AZURE_DEVOPS_EXT_PAT, как показано в следующем примере.

Использование System.AccessToken зависит от наличия PAT. В качестве более безопасной альтернативы можно использовать задачу AzureCLI@2 для заполнения подключения к службе.

- bash: |
    az pipelines build list --organization '$(System.TeamFoundationCollectionUri)' --project '$(System.TeamProject)'
  displayName: 'Show build list'
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)

При наличии нескольких шагов, требующих проверки подлинности, добавьте AZURE_DEVOPS_EXT_PAT переменную среды на каждый шаг.

Для получения дополнительной информации о применении маркера безопасности, используемого активным конвейером, см. статью Доступ к репозиториям, артефактам и другим ресурсам.

Дополнительные сведения о проверке подлинности с помощью личного маркера доступа (PAT) см. в разделе "Вход с помощью личного маркера доступа".

Вход в Azure DevOps CLI с помощью размещенных агентов Windows и Linux

Агенты Windows и Linux, размещенные в Майкрософт, предварительно настроены с помощью Azure CLI и расширения Azure DevOps CLI.

В следующем примере показано, как войти в Azure DevOps и выполнить несколько команд. В этом примере используется образ агента, размещенный ubuntu-latest корпорацией Майкрософт. Его можно заменить на любой другой хостированный образ Windows или Linux.

В этом примере выполняется проверка подлинности с помощью Azure DevOps CLI. Он использует маркер безопасности System.AccessToken , используемый запущенным конвейером.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- bash: az --version
  displayName: 'Show Azure CLI version'

- bash: az devops configure --defaults organization='$(System.TeamFoundationCollectionUri)' project='$(System.TeamProject)' --use-git-aliases true
  displayName: 'Set default Azure DevOps organization and project'

- bash: |
    az pipelines build list
    git pr list
  displayName: 'Show build list and PRs'
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)

Установка расширения Azure DevOps CLI на размещенных агентах macOS

Агенты macOS, размещенные в среде Microsoft, имеют установленное Azure CLI, но без расширения Azure DevOps CLI. Чтобы установить расширение ИНТЕРФЕЙСА командной строки Azure DevOps, выполните следующую команду в конвейере перед вызовами Интерфейса командной строки Azure DevOps.

# Install Azure DevOps extension
- bash: az extension add -n azure-devops
  displayName: 'Install Azure DevOps extension'

Обновление версии размещенного агента Azure CLI

Агенты , размещенные корпорацией Майкрософт, обычно развертывают еженедельные обновления программного обеспечения в виртуальных средах. Для некоторых средств используется последняя версия во время развертывания. В других случаях инструмент привязан к определённым версиям.

  • Чтобы проверить включенное программное обеспечение и его версии для агентов, размещённых Microsoft, включая установленную версию Azure CLI и расширения Azure DevOps CLI, следуйте ссылкам включенного программного обеспечения в таблице программного обеспечения.
  • Чтобы проверить текущую версию Azure CLI, см. инструкции по установке Azure CLI.

Azure CLI можно обновить на размещенных образах, выполнив следующие команды в конвейере.

# Specify python version
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    architecture: 'x64'

# Update to latest Azure CLI version
- bash: pip install --pre azure-cli
  displayName: 'Upgrade Azure CLI'

Условно установите расширение Интерфейса командной строки Azure DevOps

Если ваш конвейер работает на нескольких образах виртуальных машин, размещенных корпорацией Майкрософт, и на некоторых из них не установлено расширение Azure DevOps CLI, вы можете установить его при выполнении определенных условий.

trigger:
- main

# Run on multiple Microsoft-hosted agent images
strategy:
  matrix:
    linux24:
      imageName: "ubuntu-24.04"
    linux22:
      imageName: "ubuntu-22.04"
    mac15:
      imageName: "macos-15"
    mac14:
      imageName: "macos-14"
    mac13:
      imageName: "macos-13"
    windows2025:
      imageName: "windows-2025"
    windows2022:
      imageName: "windows-2022"
  maxParallel: 3

pool:
  vmImage: $(imageName)

steps:
- bash: az --version
  displayName: 'Show Azure CLI version'

# Install Azure DevOps CLI extension only on macOS images
- bash: az extension add -n azure-devops
  condition: contains(variables.imageName, 'mac')
  displayName: 'Install Azure DevOps extension'

# Azure DevOps CLI extension call that does not require login or credentials
# since it configures the local environment
- bash: az devops configure --defaults organization='$(System.TeamFoundationCollectionUri)' project='$(System.TeamProject)' --use-git-aliases true
  displayName: 'Set default Azure DevOps organization and project'

# Call that does require credentials, use the System.AccessToken PAT
# and assign to AZURE_DEVOPS_EXT_PAT which is known to Azure DevOps CLI extension
- bash: |
    az pipelines build list
    git pr list
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'Show build list and PRs'

Azure DevOps CLI с локальными агентами

Для установки или обновления Azure DevOps CLI в локальном агенте можно использовать следующие методы.

Установка Azure CLI и расширения Azure DevOps CLI вручную

Установка компонентов Azure CLI и Azure DevOps CLI на вашем локальном агенте при подготовке образа виртуальной машины для этого агента происходит быстрее, чем установка их каждый раз при запуске конвейера.

Чтобы установить Azure CLI на образ локального агента, см. статью "Установка Azure CLI". Существуют отдельные инструкции для Windows, Linux и macOS.

После установки Azure CLI установите расширение Azure DevOps CLI.

Установите Azure CLI и расширение Azure DevOps CLI в вашей конвейерной системе

В следующем примере настройки azure CLI и расширения Azure DevOps CLI для локального агента с помощью конвейера имеются следующие предварительные требования.

# Specify python version if you have side-by-side versions
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    architecture: 'x64'

# Update pip to latest
- bash: python -m pip install --upgrade pip
  displayName: 'Upgrade pip'

# Update to latest Azure CLI version, min version required for Azure DevOps is 2.10.1
- bash: pip install --pre azure-cli
  displayName: 'Upgrade Azure CLI'

Установите расширение Azure CLI DevOps:

  • Установлен Azure CLI версии 2.10.1 или более поздней.
  • Существует версия bash, установленная на агенте и в системном пути. Для использования задачи bash требуется установить bash.
# Install Azure DevOps extension
- bash: az extension add -n azure-devops
  displayName: 'Install Azure DevOps extension'

# Now you can make calls into Azure DevOps CLI
# ...

В следующем примере устанавливается Azure CLI, за которым следует расширение Azure DevOps CLI.

steps:
# Specify python version if you have side-by-side versions
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    architecture: 'x64'

# Update pip to latest
- bash: python -m pip install --upgrade pip
  displayName: 'Upgrade pip'

# Update to latest Azure CLI version, min version required for Azure DevOps is 2.10.1
- bash: pip install --pre azure-cli
  displayName: 'Upgrade Azure CLI'

# Install Azure DevOps extension
- bash: az extension add -n azure-devops
  displayName: 'Install Azure DevOps extension'

# Now you can make calls into Azure DevOps CLI
# ...

Присвоить результаты вызова команд Azure DevOps CLI переменной

Чтобы сохранить результаты вызова Azure DevOps CLI в переменной конвейера, используйте task.setvariable синтаксис, описанный в разделе Установка переменных в скриптах. Следующий пример получает идентификатор группы переменных с именем Fabrikam-2023 и использует это значение в следующем шаге.

variables:
- name: variableGroupId

trigger: none

pool:
  vmImage: "ubuntu-latest"

steps:
- bash: az devops configure --defaults organization='$(System.TeamFoundationCollectionUri)' project='$(System.TeamProject)' --use-git-aliases true
  displayName: 'Set default Azure DevOps organization and project'

- bash: echo "##vso[task.setvariable variable=variableGroupId]$(az pipelines variable-group list --group-name Fabrikam-2023 --query [].id -o tsv)"
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'Get Fabrikam-2023 variable group id'

- bash: az pipelines variable-group variable list --group-id '$(variableGroupId)'
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'List variables in Fabrikam-2023 variable group'

Аутентификация через служебное подключение

При использовании подключения к службе подключение службы предоставляет необходимые учетные данные для команд Azure CLI и Azure DevOps CLI в задаче AzureCLI@2, не требуя ручного управления учетными данными в конвейере.

Note

При использовании подключения службы для проверки подлинности AzureCLI@2необходимо вручную добавить учетную запись службы в организацию Azure DevOps.

Этот пример кода определяет новый параметр serviceConnectionс именем существующего подключения к службе. Параметр упоминается в задаче AzureCLI@2. Задача перечисляет все проекты (az devops project list) и пулы (az pipelines pool list).

trigger:
  - main

parameters:
- name: serviceConnection
  displayName: Azure Service Connection Name
  type: string
  default: my-service-connection

steps:
  - task: AzureCLI@2
    condition: succeededOrFailed()
    displayName: 'Azure CLI -> DevOps CLI'
    inputs:
      azureSubscription: '${{ parameters.serviceConnection }}'
      scriptType: pscore
      scriptLocation: inlineScript
      inlineScript: |
        Write-Host "Using logged-in Azure CLI session..."
        Write-Host "$($PSStyle.Formatting.FormatAccent)az devops configure$($PSStyle.Reset)"
        az devops configure --defaults organization=$(System.CollectionUri) project=$(System.TeamProject)
        az devops configure -l

        Write-Host "`nUse Azure DevOps CLI (az devops) to list projects in the organization '$(System.CollectionUri)'..."
        Write-Host "$($PSStyle.Formatting.FormatAccent)az devops project list$($PSStyle.Reset)"
        az devops project list --query "value[].{Name:name, Id:id}" `
                               -o table

        Write-Host "`nUse Azure DevOps CLI (az pipelines) to list pools in the organization '$(System.CollectionUri)'..."
        Write-Host "$($PSStyle.Formatting.FormatAccent)az pipelines pool list$($PSStyle.Reset)"
        az pipelines pool list --query "[].{Id:id, Name:name}" `
                               -o table
      failOnStandardError: true

Присвоить результаты вызова команд Azure DevOps CLI переменной

Чтобы сохранить результаты вызова Azure DevOps CLI в переменной конвейера, используйте task.setvariable синтаксис, описанный в разделе Установка переменных в скриптах. В следующем примере возвращается идентификатор группы переменных с именем Kubernetes и используется это значение на следующем шаге.

trigger:
  - main

variables:
- name: variableGroupId

parameters:
- name: serviceConnection
  displayName: Azure Service Connection Name
  type: string
  default: my-service-connection

steps:
  - task: AzureCLI@2
    condition: succeededOrFailed()
    displayName: 'Azure CLI -> DevOps CLI'
    inputs:
      azureSubscription: '${{ parameters.serviceConnection }}'
      scriptType: pscore
      scriptLocation: inlineScript
      inlineScript: |
        Write-Host "Using logged-in Azure CLI session..."
        Write-Host "$($PSStyle.Formatting.FormatAccent)az devops configure$($PSStyle.Reset)"
        az devops configure --defaults organization=$(System.CollectionUri) project=$(System.TeamProject)
        az devops configure -l

        $id = az pipelines variable-group list --group-name kubernetes --query [].id -o tsv
        Write-Host "##vso[task.setvariable variable=variableGroupId]$id"

  - task: AzureCLI@2
    condition: succeededOrFailed()
    displayName: 'Azure CLI -> DevOps CLI'
    inputs:
      azureSubscription: '${{ parameters.serviceConnection }}'
      scriptType: pscore
      scriptLocation: inlineScript
      inlineScript: |
        Write-Host "Using logged-in Azure CLI session..."
        az pipelines variable-group variable list --group-id '$(variableGroupId)'

Дополнительные примеры работы с переменными, включая работу с переменными между заданиями и этапами, см. в разделе "Определение переменных". Примеры синтаксиса запроса, используемого в предыдущем примере, см. в статье "Как запросить выходные данные команды Azure CLI с помощью запроса JMESPath".