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
Implementare il throttling in ASP.NET Core
3 metodi JavaScript che ogni applicazione web dovrebbe contenere - Parte 2
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Sottoscrizione agli eventi sul contenitore in JavaScript
Usare le variabili per personalizzare gli stili CSS
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Utilizzare i primary constructor in C#
Generare token per autenicarsi sulle API di GitHub
Taggare la output cache in base al routing in ASP.NET Core
Configurare policy CORS in Azure Container Apps
Inizializzare i container in Azure Container Apps
Eseguire attività con Azure Container Jobs