Attesa e validazione manuale nelle pipeline YAML di Azure DevOps

di Matteo Tumiati, in DevOps,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi