Gestire le implementazioni

Un'implementazione di Cloud Deploy include fasi. Una fase è un raggruppamento logico e ordinato di job da eseguire in un'implementazione.

Ogni fase include job, ovvero le azioni da eseguire in ogni fase (ad esempio deploy o verify). Ogni job può avere zero o più esecuzioni. Un'esecuzione di un job è un'istanza di un job. Se il job non è stato eseguito, non ci sono esecuzioni del job.

Questo documento descrive le fasi, i job e le esecuzioni dei job e come gestirli.

Struttura di un'implementazione

Un'implementazione è una risorsa Cloud Deploy che associa una release a un target.

Fasi

Un'implementazione è composta da una o più fasi.

Per una strategia di deployment standard, esiste una sola fase: stable.

Per una strategia di implementazione canary, esiste una fase distinta per ogni percentuale configurata. Ad esempio, se configurerai un canary che esegue il deployment del 25%, del 50% e del 100%, ci saranno tre fasi:

  • canary-25
  • canary-50
  • stable

Questi nomi di fase sono standard: canary-[PERCENTAGE] per le fasi di canary e stable per la fase del 100%. Tuttavia, se configuri un canary manuale o personalizzato, puoi controllare i nomi delle fasi.

Job ed esecuzioni job

Ogni fase di implementazione include uno o più job.

Per un'implementazione in una strategia di deployment standard, senza la verifica del deployment abilitata, è prevista una sola fase (stable).

Per un'implementazione canary, esiste una fase per ogni parte del canary (ad es. canary-25, canary-50, stable) e per ogni fase è presente un job deploy. Se la verifica è attivata, è presente anche un job verify per ogni fase.

Un'esecuzione di un job è un'istanza di un job. Ad esempio, viene eseguito un job per un job deploy e, se l'esecuzione va a buon fine, non viene eseguito nessun altro job per quel job. Se non riesce, puoi riprovare con un'altra esecuzione del job.

Saltare le fasi la prima volta

Alcune strategie di deployment (ad esempio canary) suddividono il traffico tra la vecchia e la nuova versione. Se esegui il deployment in un target per la prima volta, non esiste una versione precedente, pertanto non possiamo suddividere il traffico.

Per questo motivo, quando esegui il deployment di un canary per la prima volta, saltiamo la fase o le fasi del canary ed eseguiamo la fase stable. Dopodiché, l'applicazione viene eseguita e i deployment canary futuri includeranno le fasi canary.

In una situazione reale, in genere esegui un deployment canary in cui la tua applicazione è già in esecuzione, pertanto l'omissione di questa fase sarà rara.

Stati all'interno di un'implementazione

Gli implementamenti, le fasi, i job e le esecuzioni dei job hanno tutti uno stato. Questa sezione descrive gli stati per ciascuno.

Stati di implementazione

Un'implementazione avrà uno dei seguenti stati:

  • APPROVAL_REJECTED

    L'implementazione richiedeva l'approvazione, ma l'approvazione è stata rifiutata.

  • CANCELLED

    Lo stato finale degli implementamenti annullati da un utente.

  • CANCELLING

    Un utente ha annullato l'implementazione, ma l'annullamento non è stato completato.

  • HALTED

    In un deployment parallelo, se uno o più rollout secondari non riescono, ma almeno uno riesce, l'implementazione del controller viene interrotta se ci sono altre fasi dopo quella corrente.

    Puoi riprendere l'implementazione di un controller interrotta effettuando una delle seguenti operazioni:

    • Annullare l'implementazione del controller

    • Riprova o ignora gli eventuali job non riusciti nelle implementazioni secondarie

  • IN_PROGRESS

    È in corso l'elaborazione di un'esecuzione di job.

  • FAILED

    Un job non è riuscito e l'utente non ha scelto di ignorare l'errore.

  • PENDING

    L'elaborazione dell'implementazione non è iniziata. Questo stato passa a IN_PROGRESS o CANCELED.

  • PENDING_APPROVAL

    L'implementazione richiede l'approvazione, ma non è stata ancora approvata.

  • PENDING_RELEASE

    L'implementazione è in attesa del rendering della release.

  • SUCCEEDED

    L'implementazione è stata completata senza errori.

Stati della fase

Una fase avrà uno dei seguenti stati:

  • PENDING

    La fase è in attesa del completamento di un'altra fase dell'implementazione.

  • IN_PROGRESS

    La fase è iniziata.

  • SUCCEEDED

    La fase è stata completata correttamente.

  • FAILED

    Un job nella fase non è riuscito e l'utente non ha scelto di ignorare l'errore.

  • ABORTED

    Una fase precedente non è riuscita.

  • SKIPPED

    Quando esegui una strategia di deployment, ad esempio un deployment canary, Cloud Deploy passa alla fase stable nei casi in cui non sia ancora in esecuzione una versione dell'applicazione con cui suddividere il traffico. In questo caso, lo stato è impostato su SKIPPED.

Stati dei job

Un job avrà uno dei seguenti stati:

  • ABORTED

    Se una fase non va a buon fine, le fasi successive vengono interrotte.

    Se un job non va a buon fine e l'errore non viene ignorato, i job successivi vengono interrotti. Ad esempio, se una fase include un job di deployment e un job di verifica e il job di deployment non va a buon fine, il job di verifica viene interrotto.

  • DISABLED

    Alcuni job in una fase potrebbero essere disattivati. Ad esempio, le fasi includono sempre i job di verifica, indipendentemente dal fatto che la verifica sia attivata o meno. Se la verifica non è attivata, il job di verifica è impostato su DISABLED.

  • FAILED

    L'esecuzione di un job per questo job non è riuscita e l'utente non ha scelto di ignorare l'errore.

    L'utente ha scelto di interrompere l'esecuzione del job per questo job.

  • IGNORED

    L'esecuzione di un job per questo job non è riuscita e l'utente ha scelto di ignorare l'errore.

  • IN_PROGRESS

    Al momento è in esecuzione un job per questo job.

  • PENDING

    L'esecuzione del job è in attesa di iniziare perché un'altra fase o un altro job non è stato completato.

  • SKIPPED

    Quando esegui una strategia di deployment, ad esempio un deployment canary, Cloud Deploy passa alla fase stable nei casi in cui non sia ancora in esecuzione una versione dell'applicazione con cui suddividere il traffico. In questo caso, lo stato viene impostato su SKIPPED per i job all'interno della fase o delle fasi saltate.

  • SUCCEEDED

    L'esecuzione del job è terminata correttamente e il job successivo della fase è iniziato, o la fase successiva è iniziata o è pronta per iniziare (eventualmente in attesa di input dell'utente) oppure l'implementazione è terminata.

Stati di esecuzione dei job

  • FAILED

    L'esecuzione del job non è riuscita.

  • IN_PROGRESS

    L'esecuzione del job è iniziata, ma non è ancora terminata.

  • TERMINATED

    L'utente ha terminato l'esecuzione del job.

  • TERMINATING

    L'utente ha terminato l'esecuzione del job, ma l'operazione non è ancora stata completata.

  • SUCCEEDED

    Quando l'esecuzione di un job termina correttamente, senza errori o essere interrotta da un utente, viene impostato lo stato SUCCEEDED, che

Gestire l'implementazione

Utilizzando la console Google Cloud o il Google Cloud SDK, puoi eseguire quanto segue con un'implementazione di Cloud Deploy:

Se utilizzi il deployment parallelo con una strategia di deployment canary, consulta questo documento.

Promuovere un'implementazione

Per i target configurati per utilizzare una strategia di implementazione diversa da "standard", è necessario avanzare nell'implementazione da una fase all'altra.

Ad esempio, se hai un target configurato per eseguire un semplice deployment canary con solo le fasi 50% e stable (100%), devi avanzare l'implementazione una volta, dalla fase canary-50 alla fase stable (100%).

gcloud

gcloud deploy rollouts advance ROLLOUT_NAME \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --region=REGION

Dove:

ROLLOUT_NAME è il nome dell'implementazione in corso per la quale stai passando alla fase successiva.

RELEASE_NAME è il nome della release di cui fa parte questo rollout.

PIPELINE_NAME è il nome della pipeline di distribuzione che utilizzi per gestire il deployment di questa release.

REGION è il nome della regione in cui è stata creata la release, ad esempio us-central1. Campo obbligatorio.

Per ulteriori informazioni sul comando gcloud deploy rollouts advance, consulta la documentazione di riferimento di Google Cloud SDK.

Console

  1. Apri la pagina Pipeline di distribuzione.

  2. Fai clic sulla pipeline indicata nell'elenco delle pipeline di importazione.

    La pagina Dettagli pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.

  3. Nella scheda Implementazioni, fai clic sul nome dell'implementazione in Dettagli della pipeline di importazione.

    Viene visualizzata la pagina dei dettagli dell'implementazione.

    Dettagli sull'implementazione nella console Google Cloud

    Tieni presente che in questo esempio l'implementazione prevede una fase canary-50 e una fase stable. L'implementazione potrebbe prevedere più fasi o fasi diverse.

  4. Fai clic su Prosegui con implementazione.

    L'implementazione passa alla fase successiva.

Annullare un'implementazione

Puoi annullare qualsiasi implementazione non completata. Puoi anche annullare un rollout con errore per impedire ulteriori azioni (ad esempio ignorare o riprovare). L'implementazione deve essere in uno dei seguenti stati:

  • FAILED
  • HALTED
  • IN_PROGRESS
  • PENDING
  • PENDING_APPROVAL
  • PENDING_RELEASE

Dopo aver annullato un'implementazione, questa rimane nello stato CANCELLING fino al completamento di tutte le esecuzioni dei job in sospeso. Puoi terminare le esecuzioni di job in sospeso per le quali non vuoi attendere. Una volta completata la fase di implementazione, CANCELLED non è più possibile avanzare o modificare la campagna.

Per annullare un'implementazione:

gcloud

gcloud deploy rollouts cancel ROLLOUT_NAME \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --region=REGION

Dove:

ROLLOUT_NAME è il nome dell'implementazione in corso per la quale stai passando alla fase successiva.

RELEASE_NAME è il nome della release di cui fa parte questo rollout.

PIPELINE_NAME è il nome della pipeline di distribuzione che utilizzi per gestire il deployment di questa release.

REGION è il nome della regione in cui è stata creata la release, ad esempio us-central1. Campo obbligatorio.

Per ulteriori informazioni sul comando gcloud deploy rollouts cancel, consulta la documentazione di riferimento di Google Cloud SDK.

Console

  1. Apri la pagina Pipeline di distribuzione.

  2. Fai clic sulla pipeline indicata nell'elenco delle pipeline di importazione.

    La pagina Dettagli pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.

  3. Nella scheda Implementazioni, fai clic sul nome dell'implementazione in Dettagli della pipeline di importazione.

    Viene visualizzata la pagina dei dettagli dell'implementazione.

    Dettagli sull'implementazione nella console Google Cloud

    Tieni presente che in questo esempio l'implementazione prevede una fase canary-50 e una fase stable. L'implementazione potrebbe prevedere più fasi o fasi diverse.

  4. Fai clic su Annulla implementazione.

    L'implementazione è annullata.

Terminare l'esecuzione di un job

Puoi terminare un'esecuzione di job attualmente in corso. Ad esempio, potresti voler eseguire questa operazione se l'esecuzione di un job sembra richiedere troppo tempo o non funziona come previsto. L'esecuzione del job deve essere IN_PROGRESS per poterla interrompere.

gcloud

gcloud deploy job-runs terminate JOB_RUN_ID \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --rollout=ROLLOUT_NAME \
                               --region=REGION

Dove:

JOB_RUN_ID è l'UUID dell'esecuzione del job che vuoi interrompere. Puoi trovare l'ID esecuzione del job nella console Google Cloud, per Cloud Deploy, nella pagina di implementazione:

ID esecuzione job nei dettagli dell'implementazione nella console Google Cloud

Puoi anche ottenere l'ID delle esecuzioni del job utilizzando il comando gcloud deploy rollouts describe.

RELEASE_NAME è il nome della release di cui fa parte questa esecuzione del job.

PIPELINE_NAME è il nome della pipeline di distribuzione che utilizzi per gestire il deployment di questa release.

ROLLOUT_NAME è il nome dell'implementazione di cui fa parte questo job.

REGION è il nome della regione in cui è stata creata la release, ad esempio us-central1. Campo obbligatorio.

Per ulteriori informazioni sul comando gcloud deploy job-runs terminate, consulta la documentazione di riferimento di Google Cloud SDK.

Console

  1. Apri la pagina Pipeline di distribuzione.

  2. Fai clic sulla pipeline indicata nell'elenco delle pipeline di importazione.

    La pagina Dettagli pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.

  3. Nella scheda Implementazioni, fai clic sul nome dell'implementazione in Dettagli della pipeline di importazione.

    Viene visualizzata la pagina dei dettagli dell'implementazione.

    Dettagli sull'implementazione nella console Google Cloud

    Tieni presente che in questo esempio l'implementazione prevede una fase canary-50 e una fase stable. L'implementazione potrebbe prevedere più fasi o fasi diverse.

  4. In Fasi, fai clic sulla fase che include il job di cui vuoi interrompere l'esecuzione.

  5. In Esecuzioni job, seleziona l'esecuzione del job specifica che vuoi terminare, quindi fai clic su Termina.

    L'esecuzione del job è terminata e lo stato del job, come mostrato nella tabella Fasi, è Failure.

Dopo aver terminato l'esecuzione di un job, il job viene considerato non riuscito e puoi eseguire una delle seguenti operazioni:

  • Lascia tutto invariato e ignora l'implementazione non riuscita
  • Riprova il job
  • Ignora il job e vai al job o alla fase successiva dell'implementazione

Ignorare un job

Puoi ignorare un job non riuscito e passare immediatamente al job successivo della fase. Il job potrebbe non essere riuscito per qualsiasi motivo, ad esempio perché tu o qualcun altro avete terminato un'esecuzione del job.

Un job non riuscito indica una fase non riuscita e un'implementazione non riuscita. Tuttavia, se ignori l'errore, sia la fase sia l'implementazione possono essere avanzate e possono finalmente avere stati SUCCEEDED.

gcloud

gcloud deploy rollouts ignore-job ROLLOUT_NAME \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --job-id=JOB_ID \
                               --phase-id=PHASE_ID \
                               --region=REGION

Dove:

ROLLOUT_NAME è il nome dell'implementazione di cui fa parte questo job.

RELEASE_NAME è il nome della release corrente che include questo job.

PIPELINE_NAME è il nome della pipeline di distribuzione che utilizzi per gestire il deployment di questa release.

JOB_ID è il nome del job da ignorare, ad esempio DEPLOY. Puoi trovare il nome del job nella tabella Fasi per il rollout nella console Google Cloud:

La tabella delle fasi nella console Google Cloud con un'esecuzione del job non riuscita

PHASE_ID è il nome della fase che include il job che stai ignorando.

REGION è il nome della regione in cui è stata creata la release, ad esempio us-central1.

Per ulteriori informazioni sul comando gcloud deploy rollouts ignore-job, consulta la documentazione di riferimento di Google Cloud SDK.

Console

  1. Apri la pagina Pipeline di distribuzione.

  2. Fai clic sulla pipeline indicata nell'elenco delle pipeline di importazione.

    La pagina Dettagli pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.

  3. Nella scheda Implementazioni, fai clic sul nome dell'implementazione in Dettagli della pipeline di importazione.

    Viene visualizzata la pagina dei dettagli dell'implementazione.

  4. Seleziona il job non riuscito da ignorare.

  5. Fai clic sul pulsante Ignora errori.

    L'esecuzione del job non riuscita viene ignorata e l'implementazione continua come se il job avesse avuto esito positivo. In altre parole, se ci sono altri job nella stessa fase, vengono eseguiti. In caso contrario, l'implementazione è pronta per passare alla fase successiva.

Un job non riuscito, pronto per essere ignorato, nella console Google Cloud

Riprovare un job non riuscito

Puoi riprovare un'esecuzione di job non riuscita. Il job può non riuscire per uno dei seguenti motivi:

  • L'esecuzione di un job non è riuscita a essere completata.

    Ad esempio, potrebbe essersi verificato un errore di autorizzazione.

  • Un utente ha terminato l'esecuzione di un job da quel job.

    L'interruzione di un'esecuzione del job comporta un job non riuscito, che puoi riprovare.

  • Un test di verifica non è riuscito.

    Per un job di verifica, un test di verifica è stato eseguito senza esito. Anche se il job di verifica è stato completato correttamente, uno dei test di verifica non è riuscito e lo abbiamo propagato al job di verifica. In questo caso, dovrai riprovare a eseguire il job nell'ambito del debug del test non riuscito eseguito sulla tua applicazione.

Per riprovare un job non riuscito:

gcloud

gcloud deploy rollouts retry-job JOB_NAME \
                       --release=RELEASE_NAME \
                       --delivery-pipeline=PIPELINE_NAME \
                       --rollout=ROLLOUT_NAME \
                       --phase=PHASE_ID \
                       --region=REGION

Dove:

JOB_NAME è il nome del job che stai tentando di eseguire nuovamente. Ad esempio, se stai riprovando il job di verifica dopo una verifica non riuscita, il valore sarà verify.

RELEASE_NAME è il nome della release di cui fa parte questa esecuzione del job.

PIPELINE_NAME è il nome della pipeline di distribuzione che utilizzi per gestire il deployment di questa release.

ROLLOUT_NAME è il nome dell'implementazione di cui fa parte questo job.

PHASE_ID è il nome della fase di cui fa parte questo job. Ad esempio, canary-50 o stable.

REGION è il nome della regione in cui è stata creata la release, ad esempio us-central1. Campo obbligatorio.

Per ulteriori informazioni sul comando gcloud deploy rollouts retry-job, consulta la documentazione di riferimento di Google Cloud SDK.

Console

  1. Apri la pagina Pipeline di distribuzione.

  2. Fai clic sulla pipeline indicata nell'elenco delle pipeline di importazione.

    La pagina Dettagli pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.

  3. Nella scheda Implementazioni, fai clic sul nome dell'implementazione in Dettagli pipeline di importazione.

    Viene visualizzata la pagina dei dettagli dell'implementazione.

  4. In Fasi e job, fai clic sulla fase che include il job che stai ritentando.

  5. Seleziona il job da riprovare.

  6. Fai clic su Riprova e conferma.

    Dettagli sull'implementazione nella console Google Cloud

    L'esecuzione del job viene eseguita di nuovo e lo stato del job, come mostrato nella tabella Fasi, è "In corso". Se sono presenti altri job nella stessa fase, vengono eseguiti. In caso contrario, l'implementazione è pronta per passare alla fase successiva.

Passaggi successivi