Come in qualsiasi altro linguaggio, anche nelle pipeline YAML di Azure DevOps è possibile sovrascrivere il valore di alcune variabili. Questo potrebbe non essere sempre un comportamento desiderato e quindi si può utilizzare il concetto delle read-only variables per evitare potenziali rischi. Vediamo due esempi differenti:
variables: - name: nome value: mario - name: cognome value: rossi readonly: true steps: - checkout: none - bash: | echo "##vso[task.setvariable variable=nome;]marco" echo "##vso[task.setvariable variable=cognome;]verdi" name: SetVars
In questo primo esempio, abbiamo fatto uso di due variabili, una "classica" e una marcata con l'attributo readonly. Nella pipeline abbiamo quindi inserito un task che prova a sovrascrivere i valori globali definiti all'inizio e il risultato è che il nome verrà rimpiazzato correttamente, mentre nel secondo caso verrà lanciato un errore e la pipeline terminerà l'esecuzione perchè il valore non è riscrivibile. Di fatto, abbiamo realizzato una variabile immutabile per tutto il corso di esecuzione.
Tuttavia, qualora volessimo limitare lo scope solo ad un task, possiamo ricorrere a questo secondo metodo:
variables: - name: nome value: mario - name: cognome value: rossi steps: - checkout: none - bash: | echo "##vso[task.setvariable variable=nome;]marco" echo "##vso[task.setvariable variable=cognome;]verdi" name: SetVars target: settableVariables: - nome
Le variabili sono definite a livello globale senza alcun attributo aggiuntivo, ma nello step in cui dobbiamo riscrivere il loro valore, aggiungiamo il target settableVariables con l'elenco delle variabili che vogliamo sovrascrivere. In questo modo, possiamo limitare l'accesso e la modifica delle variabili e l'esecuzione del task procederà in modo del tutto normale, perchè verrà generato soltanto un warning anziché un errore, qualora cercassimo di cambiarne il valore. Se vogliamo impedire la modifica di tutte le variabili, ci basterà impostare il valore none anziché elencarle tutte, rendendo il task più sicuro.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Selettore CSS :has() e i suoi casi d'uso avanzati
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Sostituire la GitHub Action di login su private registry
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare l nesting nativo dei CSS
Ottenere un token di accesso per una GitHub App