Condividi tramite


CLI di Azure DevOps in YAML della pipeline di Azure

Azure DevOps Services

Note

Questa funzionalità viene implementata questa settimana e la prossima. Se la funzionalità non è ancora visibile nel progetto di Azure DevOps Services, controlla nuovamente tra qualche giorno.

Azure DevOps CLI consente di gestire le risorse di Azure DevOps dalla riga di comando. Esegui i comandi CLI in una pipeline YAML con l'attività AzureCLI@3 per automatizzare attività DevOps comuni come parte del flusso di lavoro CI/CD. Gli agenti Microsoft ospitati Windows e Linux includono già interfaccia della riga di comando di Azure e l'estensione CLI di Azure DevOps.

Per l'autenticazione, usare una connessione al servizio Azure DevOps supportata dalla federazione delle identità di carico di lavoro di Microsoft Entra. È consigliabile questo approccio perché elimina la gestione delle credenziali. Usare un token di accesso personale (PAT) solo quando una connessione al servizio non è disponibile.

Eseguire l'autenticazione con Azure DevOps

Alcuni comandi dell'interfaccia della riga di comando di Azure DevOps, ad esempio az devops configure e az devops --help, non richiedono alcuna autenticazione. Non si connettono a Azure DevOps. La maggior parte dei comandi interagisce con Azure DevOps e richiede l'autenticazione.

È possibile eseguire l'autenticazione usando il token di sicurezza System.AccessToken usato dalla pipeline in esecuzione assegnandolo a una variabile di ambiente denominata AZURE_DEVOPS_EXT_PAT, come illustrato nell'esempio seguente.

L'uso di System.AccessToken si basa sulla presenza di un PAT. Come alternativa più sicura, usare una connessione al servizio. Per indicazioni sulla configurazione, vedere Gestire le connessioni al servizio.

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

Se sono presenti più passaggi che richiedono l'autenticazione, aggiungere la AZURE_DEVOPS_EXT_PAT variabile di ambiente a ogni passaggio.

Per altre informazioni sull'ambito del token di sicurezza usato dalla pipeline in esecuzione, vedere Accedere a repository, artefatti e altre risorse.

Per altre informazioni sull'autenticazione tramite un token di accesso personale, vedere Accedere con un token di accesso personale.

Accedere all'interfaccia della riga di comando di Azure DevOps con agenti ospitati Windows e Linux

Gli agenti Windows e Linux ospitati da Microsoft sono preconfigurati con interfaccia della riga di comando di Azure e l'estensione CLI di Azure DevOps.

Nell'esempio seguente viene illustrato come accedere a Azure DevOps ed eseguire alcuni comandi. In questo esempio viene utilizzata l'immagine dell'agente ospitato ubuntu-latest da Microsoft. È possibile sostituirlo con qualsiasi altra immagine ospitata su Windows o Linux.

Questo esempio esegue l'autenticazione con l'interfaccia della riga di comando di Azure DevOps. Usa il token di sicurezza System.AccessToken usato dalla pipeline in esecuzione.

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)

Installare l'estensione della CLI di Azure DevOps con gli agenti ospitati su macOS

Gli agenti Microsoft ospitati in macOS hanno interfaccia della riga di comando di Azure installato ma non l'estensione dell'interfaccia della riga di comando di Azure DevOps. Per installare l'estensione dell'interfaccia della riga di comando di Azure DevOps, eseguire il comando seguente nella pipeline prima di effettuare chiamate all'interfaccia della riga di comando di Azure DevOps.

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

Aggiornare la versione dell'agente ospitato interfaccia della riga di comando di Azure

gli agenti ospitati da Microsoft tipicamente distribuiscono gli aggiornamenti settimanali al software negli ambienti virtuali. Per alcuni strumenti, viene usata la versione più recente al momento della distribuzione. In altri casi, lo strumento è fissato a versioni specifiche.

  • Per controllare il software incluso e le relative versioni per gli agenti ospitati Microsoft, inclusa la versione installata di interfaccia della riga di comando di Azure e l'estensione dell'interfaccia della riga di comando Azure DevOps, seguire la tabella Included Software nella tabella Software.
  • Per controllare la versione corrente per interfaccia della riga di comando di Azure, vedere Come installare il interfaccia della riga di comando di Azure.

È possibile aggiornare il interfaccia della riga di comando di Azure nelle immagini ospitate eseguendo i comandi seguenti nella pipeline.

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

Installare in modo condizionale l'estensione dell'interfaccia della riga di comando di Azure DevOps

Se la tua pipeline viene eseguita su diverse immagini di macchine virtuali ospitate da Microsoft, alcune delle quali non hanno installata l'estensione CLI di Azure DevOps, puoi installarla in modo condizionale.

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"
    windows2025:
      imageName: "windows-2025"
  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'

interfaccia a riga di comando di Azure DevOps con agenti self-hosted

È possibile usare i metodi seguenti per installare o aggiornare l'interfaccia della riga di comando di Azure DevOps nell'agente self-hosted.

Installare manualmente interfaccia della riga di comando di Azure e l'estensione dell'interfaccia della riga di comando di Azure DevOps

L'installazione di interfaccia della riga di comando di Azure e dell'estensione CLI di Azure DevOps sul tuo agente self-hosted al momento del provisioning dell'immagine della macchina virtuale per l'agente è più veloce rispetto all'installazione ogni volta che viene eseguita la pipeline.

Per installare interfaccia della riga di comando di Azure nell'immagine dell'agente self-hosted, vedere Installare l'interfaccia della riga di comando di Azure. Sono disponibili istruzioni separate per Windows, Linux e macOS.

Dopo aver installato interfaccia della riga di comando di Azure, installare l'estensione Azure DevOps cli.

Installare interfaccia della riga di comando di Azure e l'estensione Azure DevOps CLI nella pipeline

L'esempio seguente sulla configurazione di interfaccia della riga di comando di Azure e dell'estensione della CLI di Azure DevOps tramite una pipeline in un agente self-hosted presenta i prerequisiti seguenti.

  • Installare interfaccia della riga di comando di Azure usando Python. Python deve essere installato nell'agente in base alle istruzioni riportate nell'attività di Python versione: come è possibile configurare un agente self-hosted per usare questa attività?. L'attività UsePythonVersion@0 non installa Python nell'agente self-hosted. Se è installata una sola versione di Python nell'agente self-hosted e si trova nel percorso, non è necessario usare l'attività UsePythonVersion@0.
# 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'

Installare interfaccia della riga di comando di Azure'estensione DevOps:

  • è installata interfaccia della riga di comando di Azure versione 2.10.1 o versione successiva.
  • È disponibile una versione di bash installata nell'agente e nel percorso. Per usare l'attività bash è necessaria un'installazione di 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
# ...

L'esempio seguente installa interfaccia della riga di comando di Azure seguito dall'estensione dell'interfaccia della riga di comando di Azure DevOps.

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

Assegnare i risultati di una chiamata dell'interfaccia della riga di comando Azure DevOps a una variabile

Per archiviare i risultati di una chiamata dell'interfaccia della riga di comando di Azure DevOps a una variabile della pipeline, usare la sintassi task.setvariable descritta in Set variabili negli script. L'esempio seguente ottiene l'ID di un gruppo di variabili denominato Fabrikam-2023 e usa questo valore in un passaggio successivo.

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'

Eseguire l'autenticazione con una connessione al servizio

Quando si utilizza una connessione al servizio, quest'ultima fornisce le credenziali necessarie per interfaccia della riga di comando di Azure e per i comandi CLI di Azure DevOps nell'attività "AzureCLI@3" senza richiedere la gestione manuale delle credenziali nella pipeline.

Note

Quando si usa una connessione al servizio per l'autenticazione con AzureCLI@3, è necessario aggiungere l'entità servizio all'organizzazione Azure DevOps.

Per indicazioni gratuite su PAT e procedure consigliate per la connessione al servizio, vedere Gestire le connessioni al servizio.

Questo esempio di codice definisce un nuovo parametro, serviceConnection, con il nome di una connessione al servizio esistente. Tale parametro viene fatto riferimento nell'attività AzureCLI@3 . Lo script usa una connessione senza segreto per chiamare un endpoint REST, quindi elenca i progetti e i pool.

trigger:
  - main

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

steps:
  - task: AzureCLI@3
    displayName: Secret-less
    inputs:
      connectionType: 'azureDevOps'
      azureDevOpsServiceConnection: '${{ parameters.serviceConnection }}'
      scriptType: 'pscore'
      scriptLocation: 'inlineScript'
      inlineScript: |
        az rest --method get `
                --url "https://status.dev.azure.com/_apis/status/health?api-version=7.1-preview.1" `
                --resource 499b84ac-1321-427f-aa17-267ca6975798 `
                --query "sort_by(services[?id=='Pipelines'].geographies | [], &name)" `
                -o table

        az devops configure -l

        az devops project list --query "value[].{Name:name, Id:id}" `
                              -o table

        az pipelines pool list --query "[].{Id:id, Name:name}" `
                              -o table
      failOnStandardError: true

Assegnare i risultati di una chiamata dell'interfaccia della riga di comando Azure DevOps a una variabile

Per archiviare i risultati di una chiamata dell'interfaccia della riga di comando di Azure DevOps a una variabile della pipeline, usare la sintassi task.setvariable descritta in Set variabili negli script. L'esempio seguente ottiene l'ID di un gruppo di variabili denominato kubernetes e usa questo valore in un passaggio successivo.

trigger:
  - main

variables:
- name: variableGroupId

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

steps:
  - task: AzureCLI@3
    displayName: Set variable group ID
    inputs:
      connectionType: 'azureDevOps'
      azureDevOpsServiceConnection: '${{ parameters.serviceConnection }}'
      scriptType: 'pscore'
      scriptLocation: 'inlineScript'
      inlineScript: |
        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@3
    displayName: List variable group variables
    inputs:
      connectionType: 'azureDevOps'
      azureDevOpsServiceConnection: '${{ parameters.serviceConnection }}'
      scriptType: 'pscore'
      scriptLocation: 'inlineScript'
      inlineScript: |
        az pipelines variable-group variable list --group-id '$(variableGroupId)'

Per altri esempi di utilizzo delle variabili, tra cui l'uso di variabili tra processi e fasi, vedere Definire le variabili. Per esempi della sintassi di query usata nell'esempio precedente, vedere Come interrogare l'output del comando di interfaccia della riga di comando di Azure utilizzando una query JMESPath.