Prendiamo in esempio la seguente pipeline:
trigger: none pool: vmImage: 'ubuntu-latest' steps: - script: echo hello world
Sembra piuttosto semplice, in quanto andiamo solamente a stampare sulla console il classico messaggio "Hello world". Tuttavia, stiamo specificando alla pipeline, anche se in maniera implicita, di fare il checkout del repository di git alla quale la pipeline è associata. Infatti, se controlliamo i log, troveremo qualcosa di simile al seguente:

Il task CmdLine sarà quello che stampa a tutti gli effetti il messaggio, ma appena prima di esso, ci sarà, appunto, il checkout del repo. Se andiamo a vedere i dettagli, Azure DevOps fa un checkout al commit e, per evitare anche push sul repo (comunque limitati da apposite permission), ci rimanda al detached state. Sebbene questo sia comunque uno stato più che valido di git, questo introduce dei warning nei log della pipeline simili al seguente:
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command.
Di nuovo, questo non rappresenta un fondamentale problema, ma per gli inesperti o per i casi in cui è necessario "debuggare" una pipeline, un warning in più può fare la differenza. In questo caso, possiamo risolvere il problema esplicitando l'operazione di checkout. La pipeline si deve quindi trasformare in un qualcosa di simile:
trigger: none pool: vmImage: 'ubuntu-latest' steps: - script: git config --global advice.detachedHead false - checkout: self - script: echo hello world
Il checkout è ora scritto chiaramente e non è nemmeno la prima operazione da effettuare tra gli step del job. Infatti, appena prima del clone del repository, dobbiamo andare ad impostare la variabile detachedHead della sezione advice (i messaggi di stato) di git stesso al valore false. In questo modo, la pipeline risulterà molto più pulita ed il messaggio non comparirà più tra i log.
git -c http.extraheader="AUTHORIZATION: bearer ***" fetch --force --tags --prune --progress --no-recurse-submodules origin +239d7c9xxx:refs/remotes/origin/239d7c9xxx From https://dev.azure.com/aspitalia/net/_git/NetCore * [new ref] 239d7c9xxx -> origin/239d7c9xxx git checkout --progress --force 239d7c9xxx Note: switching to '----'.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Calcolare automaticamente un numero di versione di un repository in una GitHub Action
Utilizzare le Promise in Javascript - prima parte
Personalizzare la creazione dell'utenze Azure B2C tramite API connector
Generare un QR Code da ASP.NET Web API
Utilizzare SFTP con Azure Storage Blob
YARP: un reverse proxy in ASP.NET Core
Compilare automaticamente applicazioni .NET 6 con le pipeline di Azure DevOps e GitHub Action
Retry automatico di un task di una pipeline di Azure DevOps
Code reviewers as code in GitHub
Ottimizzare il codice JavaScript con i Shorthand Patterns - seconda parte
Eseguire uno scroll all'interno di una pagina Blazor
Aggiungere più autori in un commit di Git
I più letti di oggi
- Semplificare la gestione delle eccezioni per parametri non nullable in C#
- devConf 2022 - Online
- Impostare un default custom per i metodi LINQ che tornano il valore di default
- Impostare il tema light o dark utilizzando i CSS
- Utilizzare il metodo reduce in JavaScript
- Gestire eventi di serializzazione e deserializzazione in .NET con System.Text.Json
- Recuperare la data di creazione e ultima modifica di un record con Entity Framework Core e le temporal table di SQL Server
- Usare domini personalizzati con Azure Container App
- Utilizzare l'API del browser fetch