In una delle ultime release di Azure DevOps è stato rilasciato un nuovo task per le pipeline YAML chiamato ManualValidation: questo task è molto simile al ManualIntervention presente nelle release pipeline "classiche" e, di fatto, consente di effettuare le stesse operazioni, ovvero rimanere in attesa del completamento di una attività manuale. Sebbene, infatti, le pipeline prevedano tutta un'esecuzione automatica per minimizzare i rischi, aumentare il flusso di rilascio etc., talvolta non c'è niente di meglio che un bel controllo manuale prima di poter andare in produzione. Allo stesso modo, ci sono task che possono richiedere obbligatoriamente interventi manuali come, ad esempio, la configurazione di un proxy in una rete in cui l'agent di Azure DevOps non ha accesso o permessi per applicare le modifiche e così via.
Esattamente come per la controparte nelle pipeline di release, anche nelle pipeline YAML questo task deve obbligatoriamente essere eseguito in un ambiente serveless (senza un agent, dato che deve solamente attendere), in questo caso identificato dal pool server:
jobs: - job: A ... - job: Wait dependsOn: A pool: server timeoutInMinutes: 4320 # 3gg di timeout steps: - task: ManualValidation@0 timeoutInMinutes: 1440 # 1gg di timeout inputs: notifyUsers: | a@test.com b@test.com instructions: 'Per testare l'applicazione controllare X, Y e Z...' onTimeout: 'reject' - job: B dependsOn: Wait ...
I tre job, come possiamo vedere dall'esempio, sono concatenati, quindi fino a quando il job "Wait" non verrà validato (o rifiutato), il job "B" non sarà in grado di partire: in questa fase non verrà impegnato alcun agent perchè, appunto, il job gira in modalità agentless anche se manterrà tutte le caratteristiche tipiche di un normale job come il timeout (utile poi per capire l'azione da eseguire automaticamente), così come gli stati di uscita (se "Wait" fallisce, allora anche "B" terminerà a meno di esplicitare una condition differente). Essendo questo un job agentless, non possiamo però eseguire tutte le operazioni classiche di una pipeline ma l'uso è ristretto ad una serie specifica di task come chiamate REST, delay e query (sia di work item che di Azure Monitor).
Quando il task di ManualValidation entrerà in esecuzione, manderà immediatamente una mail a tutti gli utenti identificati dalla property notifyUsers e aspetterà una conferma sul da farsi prima di continuare o bloccarsi. Se la conferma non dovesse arrivare in tempo (specificato dal timeoutInMinutes), allora entrerà in gioco la property onTimeout che istruirà l'agent su come procedere (resume) o terminare la pipeline con una failure(reject). Le istruzioni specificate da instructions, invece, saranno visibili direttamente all'interno del tab "Review" della pipeline:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare ChatGPT con Azure OpenAI
Verificare la provenienza di un commit tramite le GitHub Actions
Effettuare update massivi con Entity Framework Core 7
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Evitare la script injection nelle GitHub Actions
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Code scanning e advanced security con Azure DevOps
Effettuare il pull di git LFS in un workflow di GitHub
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Creare form tipizzati con Angular
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub