Come usare in modo sicuro variabili e parametri nella pipeline
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Questo articolo illustra come usare in modo sicuro variabili e parametri per raccogliere input dagli utenti della pipeline. Per altre informazioni sull'uso di variabili e parametri, vedere:
- Definire le variabili
- Impostare le variabili segrete
- Usare variabili predefinite
- Usare i parametri di runtime
- Tipi di modello e utilizzo
Prestare attenzione alle variabili segrete. I modi consigliati per impostare le variabili segrete si trovano nell'interfaccia utente, in un gruppo di variabili e in un gruppo di variabili di Azure Key Vault. Per altre informazioni, vedere Impostare le variabili segrete.
Variabili
Le variabili possono essere un modo pratico per raccogliere informazioni dall'utente in anticipo. È anche possibile usare le variabili per passare i dati dal passaggio al passaggio all'interno di una pipeline.
Ma usare le variabili con cautela. Le variabili appena create, definite in YAML o scritte da uno script, sono di lettura/scrittura per impostazione predefinita. Un passaggio downstream può modificare il valore di una variabile in modo non previsto.
Ad esempio, lo script legge:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Un passaggio precedente può impostare MyConfig
su Debug & deltree /y c:
.
Anche se questo esempio elimina solo il contenuto dell'agente di compilazione, è possibile immaginare come questa impostazione possa diventare molto più pericolosa.
È 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 una chiave specifica:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Variabili di tempo di coda
Quando si definisce una variabile nell'editor dell'interfaccia utente pipeline, è possibile scegliere di consentire agli utenti di ignorarne il valore durante l'esecuzione della pipeline. Tale variabile viene chiamata variabile di tipo queue-time. Le variabili in fase di coda vengono sempre definite nell'editor dell'interfaccia utente pipeline.
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.
Durante la fase iniziale della disponibilità di Azure Pipelines questa funzionalità ha avuto alcuni problemi:
- Gli utenti possono definire nuove variabili che non sono definite in modo esplicito dall'autore della pipeline nella definizione.
- Consentiva agli utenti di eseguire l'override delle variabili di sistema.
Per correggere questi problemi, è stata definita un'impostazione per limitare le variabili che possono essere impostate in fase di accodamento. Con questa impostazione abilitata, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile nel tempo di attesa". In altre parole, è possibile impostare qualsiasi variabile in fase di accodamento, a meno che questa impostazione non sia abilitata.
L'impostazione è progettata per funzionare a livello di organizzazione e a livello di progetto.
- Livello di organizzazione. Quando l'impostazione è attivata, impone che, per tutte le pipeline in tutti i progetti dell'organizzazione, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile in fase di coda". Quando l'impostazione è disattivata, ogni progetto può scegliere se limitare o meno le variabili impostate in fase di coda. L'impostazione è un interruttore in Impostazioni organizzazione -> Pipeline -> Impostazioni. Solo gli amministratori della raccolta di progetti possono abilitarla o disabilitarla.
- Livello progetto. Quando l'impostazione è attivata, impone che, per tutte le pipeline nel progetto, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile in fase di coda". Se l'impostazione è attiva a livello di organizzazione, è attivata per tutti i progetti e non può essere disattivata. L'impostazione è un interruttore in Project Impostazioni - Pipelines ->> Impostazioni. Solo gli amministratori del progetto possono abilitarla o disabilitarla.
Esaminiamo un esempio. Si supponga che l'impostazione sia attivata e che la pipeline definisca una variabile denominata my_variable
che non è impostabile in fase di coda.
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 avrà esito negativo 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, i parametri della pipeline non possono essere modificati da una pipeline durante l'esecuzione.
I parametri hanno tipi di dati come number
e string
e possono essere limitati a un subset di valori.
La limitazione dei parametri è utile quando una parte configurabile dall'utente della pipeline deve accettare un valore solo da un elenco vincolato. L'installazione garantisce che la pipeline non accetta dati arbitrari.
Abilitare la convalida dei parametri degli argomenti delle attività della shell
Le pipeline possono fare riferimento alle attività eseguite nella pipeline. Diverse attività incluse in Azure DevOps hanno un parametro di argomenti 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 esaminato per i caratteri che potrebbero non essere eseguiti correttamente dalla shell. I caratteri di esempio includono punti e virgola, virgolette e parentesi.
Analogamente all'opzione Limita variabili che possono essere impostate in fase di coda, è possibile configurare la convalida dei parametri degli argomenti delle attività della shell a livello di organizzazione a livello di organizzazione a livello di Impostazioni> Pipelines> Impostazioni o a livello di progetto a livello di progetto a livello di Impostazioni> Pipelines>Impostazioni.
Se abilitata, si verifica un problema di convalida rilevato, viene registrato 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 il problema, modificare gli argomenti eliminando caratteri speciali, come indicato nel messaggio di errore.
Quando l'opzione Abilita la convalida dei parametri degli argomenti delle attività della shell è abilitata, la convalida viene applicata al parametro arguments nelle attività seguenti.
- PowerShell
- BatchScript
- Bash
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy
Passaggi successivi
Dopo aver protetto gli input, è anche necessario proteggere l'infrastruttura condivisa.