Gérer les déploiements

Un déploiement Cloud Deploy comprend des phases. Une phase est un regroupement logique et ordonné des tâches à effectuer lors d'un déploiement.

Chaque phase comprend des tâches, qui sont les actions à effectuer à chaque phase (par exemple, deploy ou verify). Chaque tâche peut avoir zéro ou plusieurs exécutions. Une exécution de tâche est une instance de tâche. Si la tâche n'a pas été exécutée, aucune exécution de tâche n'est effectuée.

Ce document décrit les phases, les tâches et les exécutions de tâches, et explique comment les gérer.

Structure d'un déploiement

Un déploiement est une ressource Cloud Deploy qui associe une version à une cible.

Phases

Un déploiement se compose d'une ou de plusieurs phases.

Pour une stratégie de déploiement standard, il n'y a qu'une seule phase: stable.

Pour une stratégie de déploiement canari, une phase distincte est définie pour chaque pourcentage configuré. Par exemple, si vous configurez un canari qui se déploie à 25%, puis à 50%, puis à 100%, trois phases sont prévues:

  • canary-25
  • canary-50
  • stable

Ces noms de phases sont standards: canary-[PERCENTAGE] pour les étapes Canary et stable pour la phase à 100 %. Toutefois, si vous configurez un canari manuel ou personnalisé, vous pouvez contrôler les noms de phase.

Tâches et exécutions de tâches

Chaque phase de déploiement comprend une ou plusieurs tâches.

Pour un déploiement dans une stratégie de déploiement standard, sans validation de déploiement activée, il existe une phase (stable).

Pour un déploiement Canary, il y a une phase pour chaque partie du canary (par exemple, canary-25, canary-50, stable), et pour chaque phase, il existe une tâche deploy. Si la validation est activée, une tâche verify est également exécutée pour chaque phase.

Une exécution de tâche est une instance de tâche. Par exemple, une exécution de tâche pour une tâche deploy est exécutée. Si elle aboutit, aucune autre exécution de tâche n'est effectuée pour cette tâche. Si elle échoue, elle peut être réessayée en tant qu'autre exécution de tâche.

Ignorer des phases la première fois

Certaines stratégies de déploiement (par exemple, Canary) répartissent le trafic entre l'ancienne et la nouvelle version. Si vous déployez une application sur une cible pour la première fois, il n'y a pas d'ancienne version. Nous ne pouvons donc pas répartir le trafic.

C'est pourquoi, lorsque vous déployez un canari pour la première fois, nous ignorons la ou les phases de canari et exécutons la phase stable. Ensuite, l'application est déployée, et les futurs déploiements Canary incluront les phases Canary.

Dans une situation réelle, vous exécuterez généralement un déploiement Canary lorsque votre application est déjà en cours d'exécution. Par conséquent, cette étape sera rarement ignorée.

États d'un déploiement

Les déploiements, les phases, les jobs et les exécutions de jobs ont tous un état. Cette section décrit les états de chacun.

États de déploiement

Un déploiement peut avoir l'un des états suivants:

  • APPROVAL_REJECTED

    Le déploiement nécessitait une approbation, mais celle-ci a été refusée.

  • CANCELLED

    État final des déploiements qui ont été annulés par un utilisateur.

  • CANCELLING

    Un utilisateur a annulé le déploiement, mais l'annulation n'a pas encore été traitée.

  • HALTED

    Dans un déploiement parallèle, si un ou plusieurs déploiements enfants échouent, mais qu'au moins un déploiement enfant aboutit, le déploiement du contrôleur est ARRÊTÉ s'il y a d'autres phases après la phase actuelle.

    Pour reprendre le déploiement d'un contrôleur interrompu, procédez comme suit:

    • Annuler le déploiement de la manette

    • Réessayer ou ignorer les jobs qui ont échoué sur les déploiements enfants

  • IN_PROGRESS

    Une exécution de tâche est en cours.

  • FAILED

    Un job a échoué et l'utilisateur n'a pas choisi d'ignorer l'échec.

  • PENDING

    Le déploiement n'a pas commencé. Cet état passe ensuite à IN_PROGRESS ou CANCELED.

  • PENDING_APPROVAL

    Le déploiement nécessite une approbation, mais n'a pas encore été approuvé.

  • PENDING_RELEASE

    Le déploiement est en attente de la génération de la version.

  • SUCCEEDED

    Le déploiement est terminé, sans échec.

États de la phase

Une phase peut avoir l'un des états suivants:

  • PENDING

    La phase attend la fin d'une autre phase du déploiement.

  • IN_PROGRESS

    La phase a commencé.

  • SUCCEEDED

    La phase est terminée.

  • FAILED

    Une tâche de la phase a échoué et l'utilisateur n'a pas choisi d'ignorer l'échec.

  • ABORTED

    Une phase précédente a échoué.

  • SKIPPED

    Lorsque vous exécutez une stratégie de déploiement, telle qu'un canary, Cloud Deploy passe à la phase stable lorsqu'il n'existe pas encore de version en cours d'exécution de l'application avec laquelle diviser le trafic. Dans ce cas, l'état est défini sur SKIPPED.

États des tâches

Une tâche peut présenter l'un des états suivants:

  • ABORTED

    Si une phase échoue, les phases suivantes sont interrompues.

    Si une tâche échoue et que cet échec n'est pas ignoré, les tâches suivantes sont interrompues. Par exemple, si une phase inclut une tâche de déploiement et une tâche de validation, et que la tâche de déploiement échoue, la tâche de validation est interrompue.

  • DISABLED

    Il est possible que certains jobs d'une phase soient désactivés. Par exemple, les phases incluent toujours des tâches de validation, que la validation soit activée ou non. Si la validation n'est pas activée, la tâche de validation est définie sur DISABLED.

  • FAILED

    L'exécution d'une tâche pour cette tâche a échoué, et l'utilisateur n'a pas choisi d'ignorer l'échec.

    L'utilisateur a choisi d'arrêter l'exécution du job pour ce job.

  • IGNORED

    Une exécution de tâche pour cette tâche a échoué, et l'utilisateur a choisi d'ignorer l'échec.

  • IN_PROGRESS

    Une exécution de tâche est actuellement en cours.

  • PENDING

    L'exécution de cette tâche est en attente de commencer, car une autre phase ou tâche n'est pas terminée.

  • SKIPPED

    Lorsque vous exécutez une stratégie de déploiement, telle qu'un canary, Cloud Deploy passe à la phase stable lorsqu'il n'existe pas encore de version en cours d'exécution de l'application avec laquelle diviser le trafic. Dans ce cas, l'état est défini sur SKIPPED pour les jobs de la ou des phases ignorées.

  • SUCCEEDED

    L'exécution de la tâche s'est terminée correctement, et la tâche suivante de la phase a commencé, ou la phase suivante a commencé ou est prête à commencer (en attente de l'entrée utilisateur, par exemple), ou le déploiement est terminé.

États d'exécution du job

  • FAILED

    L'exécution de la tâche a échoué.

  • IN_PROGRESS

    L'exécution de la tâche a commencé, mais n'est pas terminée.

  • TERMINATED

    L'utilisateur a arrêté l'exécution de la tâche.

  • TERMINATING

    L'utilisateur a terminé l'exécution de la tâche, mais elle n'est pas encore terminée.

  • SUCCEEDED

    Lorsqu'une exécution de tâche se termine correctement, sans échec ni interruption par un utilisateur, elle passe à l'état SUCCEEDED,

Gérer votre déploiement

À l'aide de la console Google Cloud ou de Google Cloud SDK, vous pouvez effectuer les opérations suivantes avec un déploiement Cloud Deploy:

Si vous utilisez un déploiement parallèle avec une stratégie de déploiement Canary, consultez ce document.

Avancer un déploiement

Pour les cibles configurées pour utiliser une stratégie de déploiement autre que "standard", vous devez faire avancer le déploiement de phase en phase.

Par exemple, si vous avez configuré une cible pour effectuer un déploiement Canary simple avec des phases de 50% et stable (100%) uniquement, vous devrez avancer le déploiement une fois, de la phase canary-50 à la phase stable (100%).

gcloud

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

Où :

ROLLOUT_NAME est le nom du déploiement en cours que vous passez à la phase suivante.

RELEASE_NAME est le nom de la version à laquelle appartient ce déploiement.

PIPELINE_NAME est le nom du pipeline de diffusion que vous utilisez pour gérer le déploiement de cette version.

REGION correspond au nom de la région dans laquelle la version a été créée, par exemple us-central1. Ce champ est obligatoire.

Pour en savoir plus sur la commande gcloud deploy rollouts advance, consultez la documentation de référence de Google Cloud SDK.

Console

  1. Ouvrez la page des pipelines de diffusion.

  2. Cliquez sur votre pipeline dans la liste des pipelines de diffusion.

    La page "Détails du pipeline de diffusion" affiche une représentation graphique de la progression de votre pipeline de diffusion.

  3. Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.

    La page des détails du déploiement s'affiche.

    Détails du déploiement dans la console Google Cloud

    Notez que dans cet exemple, le déploiement comporte une phase canary-50 et une phase stable. Votre déploiement peut comporter plus de phases ou des phases différentes.

  4. Cliquez sur Avancer le déploiement.

    Le déploiement passe à la phase suivante.

Annuler un déploiement

Vous pouvez annuler tout déploiement qui n'est pas terminé. Vous pouvez également annuler un déploiement ayant échoué pour éviter toute autre action à ce niveau (par exemple, ignorer ou réessayer). Le déploiement doit être dans l'un des états suivants:

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

Une fois qu'un déploiement est annulé, il est à l'état CANCELLING jusqu'à ce que toutes les exécutions de tâches en attente soient terminées. Vous pouvez arrêter les exécutions de tâches en attente que vous ne souhaitez pas attendre. Une fois le déploiement en CANCELLED, il ne peut plus être avancé ni modifié.

Pour annuler un déploiement:

gcloud

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

Où :

ROLLOUT_NAME est le nom du déploiement en cours que vous passez à la phase suivante.

RELEASE_NAME est le nom de la version à laquelle appartient ce déploiement.

PIPELINE_NAME est le nom du pipeline de diffusion que vous utilisez pour gérer le déploiement de cette version.

REGION correspond au nom de la région dans laquelle la version a été créée, par exemple us-central1. Ce champ est obligatoire.

Pour en savoir plus sur la commande gcloud deploy rollouts cancel, consultez la documentation de référence de Google Cloud SDK.

Console

  1. Ouvrez la page des pipelines de diffusion.

  2. Cliquez sur votre pipeline dans la liste des pipelines de diffusion.

    La page "Détails du pipeline de diffusion" affiche une représentation graphique de la progression de votre pipeline de diffusion.

  3. Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.

    La page des détails du déploiement s'affiche.

    Détails du déploiement dans la console Google Cloud

    Notez que dans cet exemple, le déploiement comporte une phase canary-50 et une phase stable. Votre déploiement peut comporter plus de phases ou des phases différentes.

  4. Cliquez sur Annuler le déploiement.

    Le déploiement est annulé.

Arrêter l'exécution d'un job

Vous pouvez arrêter une exécution de tâche en cours. Vous pouvez le faire, par exemple, si l'exécution d'une tâche semble prendre trop de temps ou ne pas fonctionner comme prévu. L'exécution de la tâche doit être IN_PROGRESS pour que vous puissiez l'arrêter.

gcloud

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

Où :

JOB_RUN_ID correspond à l'UUID de l'exécution de la tâche que vous souhaitez arrêter. Vous pouvez trouver l'ID d'exécution de la tâche dans la console Google Cloud, pour Cloud Deploy, sur la page de déploiement:

ID d'exécution de la tâche dans les détails du déploiement dans la console Google Cloud

Vous pouvez également obtenir l'ID des exécutions de tâches à l'aide de la commande gcloud deploy rollouts describe.

RELEASE_NAME est le nom de la version à laquelle appartient cette exécution de tâche.

PIPELINE_NAME est le nom du pipeline de diffusion que vous utilisez pour gérer le déploiement de cette version.

ROLLOUT_NAME est le nom du déploiement auquel cette exécution de tâche appartient.

REGION correspond au nom de la région dans laquelle la version a été créée, par exemple us-central1. Ce champ est obligatoire.

Pour en savoir plus sur la commande gcloud deploy job-runs terminate, consultez la documentation de référence de Google Cloud SDK.

Console

  1. Ouvrez la page des pipelines de diffusion.

  2. Cliquez sur votre pipeline dans la liste des pipelines de diffusion.

    La page "Détails du pipeline de diffusion" affiche une représentation graphique de la progression de votre pipeline de diffusion.

  3. Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.

    La page des détails du déploiement s'affiche.

    Détails du déploiement dans la console Google Cloud

    Notez que dans cet exemple, le déploiement comporte une phase canary-50 et une phase stable. Votre déploiement peut comporter plus de phases ou des phases différentes.

  4. Sous Phases, cliquez sur la phase qui inclut la tâche dont vous mettez fin à l'exécution.

  5. Sous Exécutions de tâches, sélectionnez l'exécution de tâche spécifique que vous arrêtez, puis cliquez sur Arrêter.

    L'exécution de la tâche est arrêtée, et son état, comme indiqué dans le tableau Phases, est Failure.

Une fois l'exécution d'une tâche arrêtée, celle-ci est considérée comme ayant échoué. Vous pouvez alors effectuer l'une des opérations suivantes:

  • Laisser la situation telle quelle et ignorer le déploiement ayant échoué
  • Relancer la tâche
  • Ignorer le job et passer à la tâche ou à la phase suivante du déploiement

Ignorer une tâche

Vous pouvez ignorer un job ayant échoué et passer immédiatement au job suivant de la phase. Cette tâche a peut-être échoué pour une raison quelconque, par exemple si vous ou quelqu'un d'autre avez arrêté l'exécution de cette tâche.

Une tâche ayant échoué signifie qu'une phase et un déploiement ont échoué. Toutefois, si vous ignorez l'échec, la phase et le déploiement peuvent progresser et peuvent finalement avoir des états 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

Où :

ROLLOUT_NAME est le nom du déploiement auquel cette exécution de tâche appartient.

RELEASE_NAME correspond au nom de la version actuelle qui inclut cette tâche.

PIPELINE_NAME est le nom du pipeline de diffusion que vous utilisez pour gérer le déploiement de cette version.

JOB_ID est le nom de la tâche à ignorer, par exemple DEPLOY. Vous trouverez le nom de la tâche dans le tableau Phases du déploiement, dans la console Google Cloud:

Tableau des phases dans la console Google Cloud, avec une exécution de tâche ayant échoué

PHASE_ID est le nom de la phase qui inclut la tâche que vous ignorez.

REGION correspond au nom de la région dans laquelle la version a été créée, par exemple us-central1.

Pour en savoir plus sur la commande gcloud deploy rollouts ignore-job, consultez la documentation de référence de Google Cloud SDK.

Console

  1. Ouvrez la page des pipelines de diffusion.

  2. Cliquez sur votre pipeline dans la liste des pipelines de diffusion.

    La page "Détails du pipeline de diffusion" affiche une représentation graphique de la progression de votre pipeline de diffusion.

  3. Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.

    La page des détails du déploiement s'affiche.

  4. Sélectionnez la tâche en échec à ignorer.

  5. Cliquez sur le bouton Ignorer les échecs.

    L'exécution du job en échec est ignorée, et le déploiement se poursuit comme si le job avait réussi. Autrement dit, s'il existe d'autres tâches dans la même phase, elles sont exécutées. Sinon, le déploiement est prêt à passer à la phase suivante.

Une tâche ayant échoué, prête à être ignorée, dans la console Google Cloud

Réessayer un job ayant échoué

Vous pouvez relancer une exécution de tâche ayant échoué. La tâche peut échouer pour l'une des raisons suivantes:

  • L'exécution d'une tâche a échoué.

    Par exemple, il se peut qu'un échec d'autorisation se soit produit.

  • Un utilisateur a arrêté l'exécution d'une tâche à partir de cette tâche.

    Si vous mettez fin à une exécution de tâche, celle-ci échoue et vous pouvez la relancer.

  • Un test de validation a échoué.

    Un test de validation a échoué pour une tâche de validation. Même si la tâche de validation s'est terminée correctement, l'un de vos tests de validation a échoué. Nous l'avons donc propagé à la tâche de validation. Dans ce cas, vous devez réessayer la tâche dans le cadre du débogage du test ayant échoué sur votre application.

Pour relancer une tâche ayant échoué:

gcloud

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

Où :

JOB_NAME est le nom de la tâche que vous réessayez. Par exemple, si vous relancez la tâche de validation après un échec de validation, la valeur est verify.

RELEASE_NAME est le nom de la version à laquelle appartient cette exécution de tâche.

PIPELINE_NAME est le nom du pipeline de diffusion que vous utilisez pour gérer le déploiement de cette version.

ROLLOUT_NAME est le nom du déploiement auquel cette exécution de tâche appartient.

PHASE_ID est le nom de la phase à laquelle cette tâche appartient. Par exemple, canary-50 ou stable.

REGION correspond au nom de la région dans laquelle la version a été créée, par exemple us-central1. Ce champ est obligatoire.

Pour en savoir plus sur la commande gcloud deploy rollouts retry-job, consultez la documentation de référence de Google Cloud SDK.

Console

  1. Ouvrez la page des pipelines de diffusion.

  2. Cliquez sur votre pipeline dans la liste des pipelines de diffusion.

    La page "Détails du pipeline de diffusion" affiche une représentation graphique de la progression de votre pipeline de diffusion.

  3. Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.

    La page des détails du déploiement s'affiche.

  4. Sous Phases et tâches, cliquez sur la phase qui inclut la tâche que vous réessayez.

  5. Sélectionnez la tâche à réessayer.

  6. Cliquez sur Réessayer, puis confirmez.

    Détails du déploiement dans la console Google Cloud

    L'exécution de la tâche est à nouveau exécutée et son état, comme indiqué dans le tableau Phases, est "En cours". Si d'autres tâches sont dans la même phase, elles sont exécutées. Sinon, le déploiement est prêt à passer à la phase suivante.

Étape suivante