Pipeline de déploiement continu

Le pipeline de déploiement continu génère toutes les preuves et le contenu du résumé de la demande de changement. Le pipeline déploie les artefacts de construction dans un environnement, tel que la mise en scène ou la production, puis collecte, crée et télécharge tous les fichiers journaux existants, les preuves et les artefacts dans le casier de preuves.

Etapes et tâches

Le tableau suivant répertorie les tâches exécutées dans un CD Pipeline. En outre, le tableau fournit également une vue d'ensemble de chacune de ces étapes:

  • Tâche ou étape: fait référence au nom de l'étape tel qu'il est défini dans le fichier de configuration .pipeline-config.yaml.

  • Brève description: fournit une explication concise des actions effectuées lors de l'exécution de l'étape.

  • Customisation admissible: indique si les utilisateurs ont la possibilité de modifier ou de remplacer le comportement par défaut de l'étape en insérant un script personnalisé dans le fichier .pipeline-config.yaml.

  • Implémentation de référence par défaut: Ceci indique si les pipelines DevSecOps sont livrés avec une implémentation prédéfinie ou par défaut pour l'étape. Notamment, pour certaines étapes telles que " unit-tests ou " setup, le pipeline DevSecOps n'offre pas d'implémentation prête à l'emploi. Au lieu de cela, les utilisateurs doivent fournir des scripts personnalisés ou du code adapté aux exigences de leur application.

  • Collecte des informations collectées: indique si l'étape effectue la collecte des informations collectées standard. Lorsque DevSecOps Pipeline fournit une implémentation de référence pour une étape, la collecte de preuves est effectuée de manière prête à l'emploi. Toutefois, si l'utilisateur choisit de modifier ou de remplacer ces étapes prédéfinies, il doit s'assurer que leurs implémentations personnalisées incluent une collecte d'informations collectées appropriée. La même responsabilité incombe aux utilisateurs pour les étapes où le pipeline DevSecOps ne fournit pas d'implémentation prête à l'emploi, ce qui les oblige à collecter des preuves. La colonne indique l'entité (Utilisateur / Pipeline) chargée de la collecte des informations collectées.

  • Ignorer autorisé (applicable à la version > = v10): indique si les utilisateurs peuvent refuser d'exécuter cette étape en définissant la propriété Ignorer sur true dans .pipeline-config.yaml. Toutefois, il est conseillé de faire preuve de prudence lors de l'utilisation de cette fonction, en particulier pour les étapes conçues pour collecter des preuves. L'omission de ces étapes peut entraîner l'absence d'informations collectées essentielles pour la génération.

Étapes et tâches du pipeline
Tâche ou étape Brève description Personnalisation autorisée dans .pipeline-config.yaml Implémentation de référence par défaut Collecte des preuves Ignorer autorisé
start Configuration de l'environnement de pipeline. Non Oui ND Non
setup Configuration de votre environnement de génération et de test. Oui Non ND Non
verify-peer-review Vérifiez que les demandes d'extraction destinées au déploiement en cours ont été approuvées. Cette étape génère une liste de demandes d'extraction liées au déploiement en cours. Si des demandes d'extraction restent non approuvées, le déploiement sera arrêté. Oui Oui Pipeline Oui
verify-artifact Validez la signature correcte de l'image planifiée pour le déploiement. Si la signature de l'image est insuffisante, le déploiement est bloqué et le processus de collecte d'informations collectées correspondant est lancé. Oui Oui Pipeline Oui
change-request Génération de la demande de changement et création du récapitulatif de preuves. Non Oui Pipeline Non
deployment Déploiement des artefacts de génération dans l'environnement, par exemple, préproduction ou production. Oui Non ND Non
acceptance-test Exécution de tests d'acceptation et d'intégration sur le déploiement. Oui Non User Oui
finish Collecte et télécharge les fichiers journaux, artefacts et preuves dans le casier de preuves. Oui Oui Pipeline Oui
rollback Il s'agit d'une étape dans prod-finish, qui est exécutée chaque fois qu'un scénario d'annulation est rencontré Oui Oui ND Non

Pour plus d'informations sur la personnalisation des étapes à l'aide du fichier .pipeline-config.yaml, voir Scripts personnalisés et Listes de paramètres de pipeline.

Ecart de déploiement

Lorsque la promotion de l'inventaire est prête, le pipeline de déploiement continu peut démarrer. L'écart de déploiement est la différence entre le contenu du dernier déploiement effectué et celui du déploiement en cours. L'écart de déploiement répertorie les éléments d'inventaire en cours de déploiement.

Pour accéder au delta de déploiement dans vos scripts de déploiement, vous pouvez utiliser les commandes suivantes:

# return a JSON file path with an array of inventory entries that were changed
get_env DEPLOYMENT_DELTA_PATH

# return a JSON file path with an array of inventory entries that were deleted
get_env DEPLOYMENT_DELTA_DELETIONS_PATH

# returns a JSON file path with an array of all inventory entries
get_env INVENTORY_ENTRIES_PATH

Calcul de la nomenclature de déploiement

La nomenclature de déploiement représente tous les les artefacts qui sont déployés dans le cadre d'une demande de changement. Une fois l'écart de déploiement calculé, le pipeline crée la nomenclature de déploiement en fonction de ces éléments.

Collecte du récapitulatif de preuves

Un récapitulatif de preuves est créé à partir de toutes les preuves qui ont été créées durant la génération pertinente ayant abouti à un déploiement. Les preuves créées lors du déploiement proprement dit sont également ajoutées au récapitulatif. Le récapitulatif de preuves est ajouté à la description de la demande de changement. Par défaut, le récapitulatif des informations collectées comprend les informations collectées au moment de la génération collectées dans le pipeline d'EC ainsi que les informations collectées collectées lors de l'exécution du pipeline CD en cours.

Les instructions suivantes s'appliquent exclusivement aux pipelines de CD ciblant les environnements de production. Utilisez l'indicateur target-environment-purpose pour déterminer si l'environnement est désigné comme pre_prod ou production.

Prérequis: dans le pipeline CD ciblant l'environnement pre_prod, définissez l'indicateur pre-prod-preuve-collection sur 1. Cela permet la collecte et le stockage des informations collectées de génération dans le casier d'informations collectées pour tous les actifs déployés par le pipeline CD, en effectuant le déploiement dans l'environnement de préproduction. Par défaut, pour les environnements désignés comme pre_prod, l'indicateur pre-prod-preuve-collection est défini sur 1.

Dans le pipeline CD ciblant l'environnement de production, définissez l'indicateur pre-prod-evidence-collection sur 1. Cela permet au pipeline CD ciblant l'environnement de production d'extraire les informations collectées collectées lors du déploiement dans l'environnement de préproduction. Par défaut, pour les environnements de production, l'indicateur pre-prod-evidence-collection est défini sur 0.

Une fois que l'indicateur pre-prod-evidence-collection est défini sur 1, les demandes de changement générées par le pipeline CD destiné à l'environnement de production incluent des références aux ID de demande de changement provenant des environnements de préproduction dans la zone Enregistrement de validation.

Pour plus d'informations, voir Récapitulatif des informations collectées.

Préparation et création d'une demande de changement

Tout ce qui modifie la base de référence doit faire l'objet d'un suivi au moyen d'une demande de changement. Ces changements sont notamment les mises à jour apportées au niveau de code existant, les modifications apportées à la configuration et les mises à jour apportées aux noeuds worker. La collecte des données de conformité de l'évaluation par les pairs est basée sur les données accessibles dans l'inventaire, le casier de preuves et le référentiel des problèmes.

Utilisez get_env CHANGE_REQUEST_ID pour optimiser la valeur de l'ID de demande de changement dans les étapes suivantes.

Ne modifiez pas la valeur de la variable qui utilise set_env, car il s'agit d'une mise en œuvre interne uniquement.

Cette étape crée la demande de changement en connectant les données de conformité disponibles en fonction des zones de demande d'extraction de promotion. La disponibilité de déploiement est calculée en fonction des preuves disponibles dans l'état de conformité collecté.

Si les preuves pré-prod sont capturées dans le déploiement de la production, les demandes de changement pré-prod sont liées à la demande de changement de la production. Pour plus d'informations, voir Données incluses dans les demandes de changement.

Plusieurs demandes de modification peuvent être pré-créées à l'aide d'un écouteur de demandes de modification dédié pour différentes configurations de déploiement, y compris les déploiements vers plusieurs régions, cibles et clusters. Une fois approuvées, ces demandes de modification préétablies peuvent être transmises au pipeline de déploiement juste à temps, qui exploite les informations précalculées pour accélérer le déploiement proprement dit.

Vérification de l'approbation de la demande de changement

Si tous les contrôles de conformité, tels que les tests unitaires, les tâches de l'analyseur de risque de code, la protection des branches et la détection des secrets, sont réussis, la demande de modification est approuvée automatiquement et la tâche s'exécute avec succès. Pour plus d'informations, voir Automatisation de la gestion des changements.

Si une vérification de compatibilité échoue, l'état de demande de changement n'est pas approuvé. Vous pouvez approuver la demande de modification manuellement et ajouter l'adresse change-request-id aux propriétés de l'environnement afin d'utiliser la demande de modification précédemment créée lors de la prochaine exécution. Vous pouvez également approuver la demande de changement manuellement et ajouter une balise d'urgence.

Déploiement

Dans la phase de déploiement, le pipeline déploie les artefacts construits dans un environnement, tel que staging ou prod. Les variables et les données d'identification pour ces étapes peuvent être consultées dans les sources suivantes :

  • Variables de l'interface utilisateur de pipeline (get_env)

Modifier le bien
Modifier le bien

Pour plus d'informations sur l'accès à ces variables, voir Scripts personnalisés.

Test d'acceptation

Vous pouvez exécuter un ensemble de tests automatisés pour vérifier que le déploiement a abouti et qu'il fonctionne comme prévu. Pour des raisons de traçabilité, assurez-vous que le journal de test contient une référence au niveau de code ou à l'image en cours de test.

Fermeture de demande de changement

Les détails relatifs au déploiement sont téléchargés dans le récapitulatif de fermeture, puis la tâche ferme la demande de changement. La catégorie close_category est ajoutée à la tâche de fermeture de demande de changement, avec les valeurs suivantes :

  • Réussi (si le déploiement est prêt et que le déploiement du CD a réussi)
  • Réussite avec des problèmes (si le récapitulatif comporte des problèmes, il n'a pas été prêt pour le déploiement et le déploiement de CD a eu lieu en cas d'urgence)

Fin de l'inventaire

Pour plus d'informations sur la fin de l'inventaire, voir Inventaire.

Redéployer une application

Présentation

Si une application plante ou se comporte de manière inattendue après des modifications de l'infrastructure, vous pouvez forcer un redéploiement pour résoudre le problème.

Utilisez cette option force-redeploy=true lorsque vous déclenchez une exécution manuelle du pipeline CD pour remplacer le comportement par défaut de détection des modifications. Ce paramètre indique au pipeline de redéployer l'intégralité de l'inventaire, même si aucune nouvelle modification n'est détectée.

Comportement par défaut (sans redéploiement forcé)

Lorsque force-redeploy n'est pas défini ou est défini sur false, le pipeline ne se déploie que lorsque de nouvelles modifications sont détectées dans le référentiel d'inventaire de l'environnement cible.

  1. Le pipeline CD démarre et marque le commit en cours avec l'identifiant d'exécution du pipeline.

  2. Le pipeline lit le contenu de la branche d'environnement correspondante à partir de cette balise.

  3. Le pipeline calcule le delta de déploiement entre le commit actuel et le commit associé à l'étiquette <target-environment>_latest.

  4. Le pipeline évalue le delta :

    • Si le delta est vide, le pipeline s'arrête et aucun déploiement n'a lieu.
    • Si le delta contient des modifications, le pipeline continue.
  5. Le pipeline déploie les modifications identifiées dans le delta.

  6. Après un déploiement réussi, le pipeline ajoute la <target-environment>_latest balise au nouveau commit.

Comportement forcé (avec redéploiement forcé)

Lorsque force-redeploy est défini sur true, le pipeline contourne la validation delta et redéploie l'inventaire complet, indépendamment des modifications détectées. Cette approche garantit que l'état complet de l'application est réappliqué à la cible de déploiement.

  1. Le pipeline CD démarre et marque le commit en cours avec l'identifiant d'exécution du pipeline.
  2. Le pipeline lit le contenu de la branche d'environnement correspondante à partir de cette balise.
  3. Le pipeline calcule le delta de déploiement, qui est généralement vide dans ce scénario.
  4. Ce force-redeploy=true paramètre permet au pipeline d'ignorer la vérification delta et de continuer.
  5. Le pipeline redéploie l'état complet de l'application à partir de la branche.
  6. Après un redéploiement réussi, le pipeline ajoute la <target-environment>_latest balise à la validation qu'il vient de déployer.

Procédure

  1. Lancer une nouvelle exécution manuelle du pipeline CD.

  2. Dans la configuration du pipeline, définissez la variable force-redeploy d'environnement sur true.

  3. Exécutez le pipeline.

Annuler un déploiement

Présentation

Une restauration annule un déploiement précédent et rétablit un état connu de l'application lorsqu'un déploiement entraîne une instabilité, des défaillances ou des problèmes de conformité. Les rollbacks sont généralement effectués pour rétablir la fiabilité du service, garantir la cohérence de la configuration ou maintenir la conformité réglementaire.

Trois approches de restauration sont disponibles, chacune adaptée à différents scénarios de récupération :

  • Restauration complète: restaure la dernière configuration valide connue en référençant un ID de demande ServiceNow de modification. Recommandé pour une récupération contrôlée et vérifiable.
  • Rollback complet à l'aide de GitOps: Restaure un état antérieur en annulant manuellement les modifications dans le dépôt d'inventaire. Non recommandé en raison d'une gestion limitée de la conformité.
  • Inline Rollback: Annule un déploiement ayant échoué dans le cadre du même pipeline lorsque des erreurs d'exécution se produisent.

Restauration complète

Présentation générale du pipeline de restauration

Ce pipeline vous permet de revenir à une configuration antérieure connue pour être valide en ciblant un ID de demande de modification ServiceNow spécifique (par exemple, CHG-12345).

Cet identifiant de demande de modification sert de signet unique pour un déploiement réussi et est une entrée obligatoire pour le pipeline de restauration.

Vous pouvez trouver l'ID de demande de modification pour un déploiement précédent de deux manières :

  • ServiceNow: Localisez la demande de modification pour le déploiement que vous souhaitez restaurer.
  • Référentiel d'inventaire: l'état de l'inventaire étant géré dans le contrôle de source, chaque déploiement est identifié de manière unique par une validation. Vous pouvez trouver le commit auquel vous souhaitez revenir et identifier la CHG-*** balise associée à ce commit.

Le pipeline de restauration comprend les étapes suivantes :

  • prod-rollback-start
  • prod-setup
  • prod-rollback-change-request
  • prod-deployment
  • prod-acceptance-tests
  • prod-rollback-finish

Le pipeline utilise les informations de la propriété rollback-change-request-id d'environnement pour créer une nouvelle demande de modification.

Pour maintenir la conformité, le pipeline rouvre les problèmes liés au déploiement précédent. Ces problèmes sont joints à la nouvelle demande de modification, et leurs dates d'échéance initiales restent inchangées. Une restauration réussie déplace la _latest balise dans l'inventaire vers la validation précédente.

Créer un pipeline de restauration

Utilisez la commande cd-rollback-listener pour déclencher une restauration vers la dernière version connue fonctionnelle.

  1. Accédez à votre pipeline de CD.
  2. Ajoutez un déclencheur manuel ou dupliquez le déclencheur CD manuel.
  3. Modifiez le déclencheur et définissez l'écouteur sur cd-rollback-listener.
  4. Sélectionnez Sauvegarder.
  5. Créez un déclencheur distinct pour chaque combinaison requise de région et d'environnement cible.

Déclencher un pipeline de restauration

Une exécution de pipeline de restauration utilise les propriétés d'environnement suivantes :

Tableau 1. Propriétés de l'environnement de restauration
Propriété d'environnement Description
rollback-change-request-id (Obligatoire) L'ID de la demande de modification du déploiement terminé que vous souhaitez annuler.
rollback-limit Nombre maximal de déploiements que vous pouvez restaurer. La valeur par défaut est 1 (dernier déploiement terminé).
region La région pour la restauration.
target-environment Environnement cible pour la restauration (par exemple, environnement de test ou de production).

Le pipeline prend fin si les critères suivants ne sont pas remplis :

  • rollback-change-request-id doit être l'ID d'un déploiement terminé pour la même région et le même environnement cible.
  • Le déploiement associé à ne rollback-change-request-id doit pas être plus ancien que le nombre de déploiements spécifié par rollback-limit.

La propriété d'environnement PIPELINE_NAME Tekton détermine si une exécution est un déploiement ou une restauration.

  • cd-rollback-pipeline: Valeur par défaut pour une restauration.
  • cd-pipeline: Valeur par défaut pour un déploiement.

Vous pouvez utiliser cette propriété pour personnaliser la logique de branchement.

Restauration complète à l'aide de GitOps

Présentation générale du rollback à l'aide de GitOps

Utilisez le pipeline de déploiement continu pour déployer une version précédente de l'inventaire dans l'environnement cible à l'aide Git d'opérations qui rétablissent les modifications apportées à un élément spécifique commit-id.

Étant donné que vous annulez les validations directement dans le référentiel d'inventaire au lieu de déclencher le pipeline de restauration à l'aide d'un ID ServiceNow de demande de modification, ce processus ne rouvre pas automatiquement les problèmes de conformité précédents et ne gère pas leurs dates d'échéance.

Une fois déclenché, le pipeline CD effectue les étapes suivantes pour le redéploiement :

  • Le pipeline démarre et marque le commit en cours (le commit revert) avec l'identifiant d'exécution du pipeline.
  • Le pipeline lit le contenu de la branche d'environnement correspondante à partir de cette balise.
  • Le pipeline calcule le delta de déploiement entre le commit actuel et le commit associé à l'étiquette <target-environment>_latest.
  • Après un déploiement réussi, la <target-environment>_latest balise est déplacée vers le nouveau commit (restauré).

Créer une demande de promotion de restauration

  1. Identifiez la commit-id de la version de déploiement dans l'inventaire vers laquelle vous souhaitez revenir.
  2. Restaurer l'état du référentiel à cette validation.
  3. Créez une demande d'extraction pour promouvoir l'état rétabli.

L'exemple suivant illustre ce scénario à l'aide de git commandes.

  1. Répertoriez les commits et les balises pour trouver l'ID du commit du dernier état connu valide (par exemple, refs/tags/8)

    # /c/usr/devsecops/compliance-inventory (master)
    $ git show-ref --tags
    ...
    83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 refs/tags/8
    ...
    1914a125e76aa97c497f4bd2c2f455b58cf079b8 refs/tags/prod_latest
    

  2. Répertoriez tous les commits entre l'état actuel (refs/tags/prod_latest) et l'état cible (refs/tags/8).

    # /c/usr/devsecops/compliance-inventory (master)
    $ git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8
    67cc8babdff3e09c1f0e632f897798c1b5424f38
    6fab5ce3d60590cd858206424ecfd7d3a8c9ceb4
    ...
    

  3. Restaurer l'état de l'inventaire à la validation cible (refs/tags/8).

    # /c/usr/devsecops/compliance-inventory (master)
    $ git revert -n $(git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8)
    

  4. Valider le nouvel état.

    # /c/usr/devsecops/compliance-inventory (master|REVERTING)
    $ git commit -m "revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8"
    [master af82538] revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8
    

  5. Poussez la mise à jour vers la branche principale.

    # /c/usr/devsecops/compliance-inventory (master)
    $ git push --set-upstream origin master
    ...
    To [https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git](https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git)
      67cc8ba..af82538  master -> master
    ...
    

Déclencher le pipeline de déploiement continu

  1. Créer une demande de modification pour les changements liés à la promotion de la restauration.

  2. Réviser et fusionner la demande d'extraction.

  3. Déclenchez l'exécution manuelle du pipeline CD dans votre chaîne d'outils CD.

Annulation en ligne

Présentation de la restauration en ligne

Ce mode annule le déploiement actuel dans le contexte de la même exécution du pipeline. Elle est requise lorsqu'une erreur ou une défaillance survient pendant la phase de déploiement ou de test d'acceptation, entraînant l'échec de la tentative de déploiement.

Une restauration en ligne s'exécute automatiquement si la propriété rollback-enabled d'environnement est définie sur 1 et qu'une erreur se produit lors de la phase de test de déploiement ou d'acceptation.

Si une restauration est déclenchée, le pipeline CD exécute le segment défini pour rollback dans votre .pipeline-config.yaml fichier. Si un rollback segment n'est pas défini dans le fichier, une implémentation par défaut s'exécute et vous invite à fournir un script de restauration.

Exemple de script de restauration dans .pipeline-config.yaml:

rollback:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.74
  script: |
    #!/usr/bin/env bash
    if [[ "$PIPELINE_DEBUG" == 1 ]]; then
      trap env EXIT
      env
      set -x
    fi
    source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/deploy_setup.sh
    source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/rollback.sh

Propriétés définies pendant la restauration en ligne

  • rollback-status: Indique l'état de l'étape de restauration. Valeurs possibles : [notRun, success, failure]
  • rollback-exit-code: Code de sortie de l'étape de restauration. Cette valeur est vide si la restauration n'a pas été exécutée.
  • default-rollback-executed: Définir sur true si l'implémentation par défaut (qui demande un script) a été exécutée. Cette valeur est vide par défaut.
  • pipeline-execution-status: Indique l'état d'exécution global du pipeline. Valeurs possibles : [successful_deployment, failed_deployment_failed_rollback, failed_deployment_successful_rollback]

Permettre la traçabilité du déploiement

Lorsqu'une RP ou une demande de fusion est fusionnée, le système améliore la transparence et la traçabilité en fournissant une visibilité claire sur ce qui se passe ensuite. Il met automatiquement à jour le PR avec l'état de déploiement, permettant aux parties prenantes de suivre facilement la progression d'une correction ou d'une fonctionnalité sans avoir besoin d'accéder aux détails du pipeline. Cette approche rationalisée permet non seulement d'améliorer la transparence, mais aussi de faciliter la traçabilité, en réduisant les efforts nécessaires à la collecte et à la vérification des informations. Après un déploiement réussi, une étiquette au format deploy:{region}:{env} est appliquée aux pull requests incluses dans le déploiement.

Un indicateur opt-in deployment-traceability, est disponible pour activer cette fonctionnalité dans le pipeline CD. Les utilisateurs peuvent activer la traçabilité des déploiements en paramétrant l'indicateur sur 1 lorsque cela est nécessaire.

Pour renforcer cette fonctionnalité, si l'utilisateur souhaite fournir un jeton spécifique pour ajouter des étiquettes aux PR dans le référentiel de l'application, il peut utiliser les propriétés d'environnement suivantes pour spécifier le jeton Git. L'ordre dans lequel le jeton Git est recherché est le suivant :

  • Une propriété d'environnement existante pour un jeton spécifique au référentiel : git-token-$repo_name-$repo_org.
  • Une nouvelle propriété d'environnement pour un jeton spécifique à une organisation : git-token-$repo_org.