Nel corso delle ultime settimane abbiamo visto come utilizzare i task di PowerShell (e di tutte le sue varianti) per eseguire determinati script su PowerShell Core, piuttosto che su Bash o varianti.
Quello che abbiamo dato per scontato, però, è che lo script sia già scritto e reso disponibile al tempo di esecuzione, cosa però, non sempre vera. Spesso può capitare, infatti, che sia necessario applicare modifiche rapide alla pipeline per vedere come essa si comporta al variare di una condizione e per questo eseguire script in linea è l'ideale.
All'interno di uno script precedente (https://www.dopsitalia.com/script/2/Eseguire-Script-Inline-Azure-DevOps.aspx) abbiamo visto come eseguirlo ma, ancora una volta, abbiamo dato per scontato un particolare: l'esecuzione deve essere singola linea. Ovviamente, anche in questo caso, la limitazione è molto forte e pertanto è possiamo fare uso del simbolo "|" (pipe) per scrivere script multi-linea:
- task: PowerShell@2 displayName: 'Select .NET Core SDK version' inputs: targetType: inline pwsh: true script: | $sdkVersion = "3.0.100" Write-Host "Selecting default version of SDK v3.0.100" Write-Host "##vso[task.setvariable variable=dotNetCoreSdkVersion;]$sdkVersion"
In questo caso specifico, siamo andati ad impostare il valore di una variabile di output, corrispondente al valore dell'SDK di .NET Core da utilizzare in uno script successivo. Lo script è volontariamente limitato, ma è evidente che si espande su più linee poiché l'esecuzione è "più complessa" di una sola "Write-Host" come abbiamo visto in precedenza.
E' bene notare che, per farlo funzionare, ci deve essere un nuovo livello di indentazione per il codice PowerShell, altrimenti l'engine di elaborazione della pipeline su Azure DevOps lo interpreterà come comandi aggiuntivi e mostrerà un errore tipo "can not read a block mapping entry; a multiline key may not be an implicit key".
Sebbene questo ci consenta di scrivere un vero e proprio script, non è comunque consigliato usarlo per scrivere centinaia di righe di codice: oltre ad esserci delle limitazioni sul numero di caratteri utilizzabili, non è l'ideale per avere una pipeline leggibile.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Paginare i risultati con QuickGrid in Blazor
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Implementare l'infinite scroll con QuickGrid in Blazor Server
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Gestione dell'annidamento delle regole dei layer in CSS
Simulare Azure Cosmos DB in locale con Docker
Disabilitare automaticamente un workflow di GitHub (parte 2)
Rendere le variabili read-only in una pipeline di Azure DevOps
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Cancellare una run di un workflow di GitHub
Utilizzare gRPC su App Service di Azure