Condividi tramite


Usare in modo sicuro variabili e parametri nella pipeline

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Informazioni su come usare in modo sicuro variabili e parametri per raccogliere input dagli utenti della pipeline. Per altre informazioni, vedere gli articoli seguenti:

Prestare attenzione con le variabili segrete. I metodi consigliati per l'impostazione delle variabili segrete includono l'uso dell'interfaccia utente, la creazione di un gruppo di variabili o l'uso di un gruppo di variabili originato da Azure Key Vault. Per altre informazioni, vedere Impostare le variabili segrete.

Variabili

Le variabili fungono da metodo pratico per raccogliere l'input utente in anticipo e facilitare il trasferimento dei dati tra i passaggi della pipeline. Tuttavia, prestare attenzione quando si lavora con le variabili. Per impostazione predefinita, le variabili appena create, definite in YAML o con script, sono di lettura/scrittura. I passaggi downstream possono modificare i valori delle variabili in modo imprevisto.

Si consideri ad esempio il frammento di script seguente:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Se un passaggio precedente imposta MyConfig su Debug & deltree /y c:, potrebbe causare conseguenze impreviste. Anche se questo esempio elimina semplicemente il contenuto dell'agente di compilazione, evidenzia il potenziale rischio di tali impostazioni.

È possibile rendere le variabili di sola lettura. Le variabili di sistema, ad esempio Build.SourcesDirectory, le variabili di output delle attività e le variabili di tempo di coda sono sempre di sola lettura. Le variabili create in YAML o create in fase di esecuzione da uno script possono essere designate come di sola lettura. Quando uno script o un'attività crea una nuova variabile, può passare il isReadonly=true flag nel relativo comando di registrazione per rendere la variabile di sola lettura.

In YAML è possibile specificare variabili di sola lettura usando la chiave specifica seguente:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Variabili di tempo di coda

Quando si definisce una variabile nell'editor dell'interfaccia utente pipeline, è possibile consentire agli utenti di eseguirne l'override durante l'esecuzione della pipeline. Queste variabili vengono definite variabili in fase di coda e vengono sempre definite all'interno dell'editor dell'interfaccia utente di Pipelines.

Screenshot della definizione di una variabile in fase di coda.

Le variabili in fase di coda vengono esposte all'utente finale quando eseguono manualmente una pipeline e possono modificare i valori. Screenshot dell'aggiornamento del valore di una variabile della coda.

Per specificare le variabili impostate in fase di coda, gli utenti devono disporre dell'autorizzazione modifica della configurazione della compilazione della coda per la pipeline.

Limita variabili che è possibile impostare nel tempo di attesa

L'interfaccia utente e l'API REST usata per eseguire una pipeline consentono agli utenti di definire nuove variabili in fase di coda.

Screenshot dell'aggiunta di una variabile di queue-time subito prima di eseguire la pipeline.

Nei primi giorni di Azure Pipelines questa funzionalità presentava i problemi seguenti:

  • Gli utenti possono definire nuove variabili non già definite dall'autore della pipeline nella definizione.
  • Consentiva agli utenti di eseguire l'override delle variabili di sistema.

Per risolvere questi problemi, è stata definita un'impostazione per limitare le variabili che possono essere impostate in fase di coda. Con questa impostazione attivata, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile in fase di coda". In altre parole, è possibile impostare qualsiasi variabile in fase di coda, a meno che questa impostazione non sia attivata.

L'impostazione è progettata per lavorare a livello di organizzazione e progetto.

  • Livello organizzazione:
    • Quando l'impostazione è attivata, impone che solo le variabili contrassegnate in modo esplicito come "Impostabile in fase di coda" possano essere modificate per tutte le pipeline in tutti i progetti all'interno dell'organizzazione.
    • Gli amministratori della raccolta di progetti possono abilitare o disabilitare questa impostazione.
    • Accedere a questa impostazione in Impostazioni>organizzazione Impostazioni pipeline.> Screenshot della limitazione delle variabili che possono essere impostate nel tempo di attesa a livello di organizzazione.
  • Livello progetto:
    • Analogamente al livello di organizzazione, l'abilitazione di questa impostazione garantisce che solo le variabili contrassegnate come "Impostabile in fase di coda" possano essere modificate per tutte le pipeline all'interno del progetto specifico.
    • Se l'impostazione a livello di organizzazione è abilitata, si applica a tutti i progetti e non può essere disattivata.
    • Gli amministratori del progetto possono abilitare o disabilitare questa impostazione.
    • Accedere a questa impostazione in >Impostazioni progetto>Impostazioni pipeline. Screenshot della limitazione delle variabili che possono essere impostate in fase di coda a livello di progetto.

L'esempio seguente mostra che l'impostazione è attivata e la pipeline definisce una variabile denominata my_variable che non è impostata in fase di accodamento. Screenshot della definizione di una variabile in una pipeline classica.

Si supponga quindi di voler eseguire la pipeline. Il pannello Variabili non mostra alcuna variabile e il pulsante Aggiungi variabile non è presente.

Screenshot del pannello delle variabili con l'impostazione attivata.

Usando le compilazioni - Coda e le esecuzioni - Eseguire chiamate ALL'API REST della pipeline per accodare un'esecuzione della pipeline e impostare il valore di my_variable o di una nuova variabile non riesce con un errore simile al seguente.

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

Parametri

A differenza delle variabili, una pipeline in esecuzione non può modificare i parametri della pipeline. I parametri hanno tipi di dati, number ad esempio e string, e possono essere limitati a subset di valori specifici. Questa restrizione è utile quando un aspetto configurabile dall'utente della pipeline deve accettare solo valori da un elenco predefinito, assicurandosi che la pipeline non accetti dati arbitrari.

Abilitare la convalida dei parametri degli argomenti delle attività della shell

Le pipeline possono fare riferimento alle attività eseguite all'interno della pipeline. Alcune attività includono un arguments parametro che consente di specificare altre opzioni per l'attività.

Quando l'impostazione Abilita la convalida dei parametri degli argomenti delle attività della shell è abilitata, il parametro arguments viene sottoposto a revisione per assicurarsi che la shell esegi correttamente caratteri come punti e virgola, virgolette e parentesi. Analogamente all'opzione Limita variabili che possono essere impostate in fase di coda, è possibile configurare abilita la convalida dei parametri degli argomenti delle attività della shell a livello di organizzazione o progetto in Impostazioni pipeline.>>

Quando questa funzionalità è attivata, eventuali problemi di convalida correlati al arguments parametro attivano un messaggio di errore simile al seguente:

Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Per risolvere questo problema, modificare gli argomenti eseguendo l'escape di caratteri speciali, come indicato nel messaggio di errore. Questa convalida si applica al arguments parametro nelle attività specifiche seguenti:

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Passaggi successivi

Proteggere l'infrastruttura condivisa