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:
- Definire le variabili
- Impostare le variabili segrete
- Usare variabili predefinite
- Usare i parametri di runtime
- Usare i tipi di modello
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.
Le variabili in fase di coda vengono esposte all'utente finale quando eseguono manualmente una pipeline e possono modificare i valori.
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.
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.>
- 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.
L'esempio seguente mostra che l'impostazione è attivata e la pipeline definisce una variabile denominata my_variable
che non è impostata in fase di accodamento.
Si supponga quindi di voler eseguire la pipeline. Il pannello Variabili non mostra alcuna variabile e il pulsante Aggiungi variabile non è presente.
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