Remarques :

Utilisation d'Oracle Cloud Infrastructure DevOps pour automatiser les déploiements OCI Resource Manager

Introduction

Oracle Cloud Infrastructure (OCI) Resource Manager est un service entièrement géré qui aide les équipes à gérer et à automatiser leur infrastructure en tant que code (IaC). Elle permet aux équipes de collaborer sur la configuration Terraform, de définir les droits d'accès sur diverses actions, de prévoir une verrouillage de l'état pour éviter toute altération, de stocker automatiquement tous les fichiers d'état dans un stockage persistant et de configurer le fournisseur Terraform. Pour la livraison et le déploiement de tous les logiciels, et pas seulement de Terraform, il existe OCI DevOps, une plate-forme d'intégration continue/de livraison continue de bout en bout pour les développeurs disposant de référentiels de code privés, de déclencheurs, de pipelines de build et de déploiement, etc.

OCI Resource Manager a intégré l'automatisation pour Terraform et les intégrations à plusieurs systèmes de contrôle de code source pour réaliser l'intégration continue et le déploiement continu de base. Dans ce tutoriel, nous allons voir comment utiliser OCI DevOps pour étendre ces fonctionnalités d'intégration continue et de déploiement continu en redéployant automatiquement les piles OCI Resource Manager sur les modifications de code Terraform.

Flux

Diagramme de flux

Le processus commence par l'envoi d'une nouvelle configuration Terraform vers le référentiel de code, ce qui déclenche les pipelines de build et de déploiement. Cela entraîne la création d'un environnement shell qui utilise l'interface de ligne de commande OCI pour appliquer la pile OCI Resource Manager à la nouvelle configuration.

Objectifs

Tâche 1 : configuration du référentiel de code OCI DevOps

  1. Connectez-vous à la console OCI, accédez à Services de développeur, à DevOps, à Projets et créez un projet DevOps qui contiendra toutes les ressources de votre workflow CI/CD.

  2. Créez un référentiel de code et téléchargez la configuration Terraform. Vous pouvez utiliser de nombreux modèles fournis par Oracle. Dans ce tutoriel, Terraform modifie simplement la description d'une rubrique Notifications OCI.

    resource "oci_ons_notification_topic" "test_notification_topic" {
        #Required
        compartment_id = <compartment_id>
        name = "RM_DevOps_Automation_Tutorial"
    
        #Optional
        description = "This is a test notification topic."
    }
    

    Configuration de la notification initiale

Tâche 2 : créer un artefact de shell

Nous devons d'abord créer l'artefact utilisé dans le pipeline de déploiement. Comme nous allons exécuter un script shell pour exécuter l'interface de ligne de commande OCI, créez un artefact de type Spécification de commande. Dans ce tutoriel, nous allons utiliser la source d'artefact pour être en ligne avec les commandes suivantes :

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Créer un artefact de shell

Pour plus d'informations sur la syntaxe et les paramètres supplémentaires, reportez-vous à la documentation sur les spécifications de commande. Nous ajouterons plus de détails à ce script ultérieurement.

Tâche 3 : créer un pipeline de déploiement

Les pipelines de déploiement sont utilisés pour déployer des artefacts.

  1. Créez un pipeline de déploiement et une phase de type Shell.

    Créer une phase de shell

  2. Cliquez sur Sélectionner un artefact et sélectionnez l'artefact créé dans la tâche 2. Sélectionnez la forme et la configuration réseau qui répondent à vos exigences.

    Sélectionner un artefact

    Remarque : Stratégies : lors de la création de phases, la liste des stratégies recommandées sera liée. Veillez à les ajouter. En outre, notre pipeline de déploiement interagira avec OCI Resource Manager et OCI Notifications. Veillez donc à accorder à votre groupe dynamique l'accès à ons-topics, orm-stacks et orm-jobs. Pour plus d'informations sur la liste complète des droits d'accès pour chaque service, reportez-vous à Référence de stratégie.

Tâche 4 : création d'un pipeline de build

Bien que nous ne construisions aucun artefact, nous avons toujours besoin d'un pipeline de build pour déclencher notre pipeline de déploiement.

  1. Créez un pipeline de build et une phase de type Déclencher le déploiement.

    Créer une phase de build

  2. Cliquez sur Sélectionner un pipeline de déploiement et sélectionnez le pipeline que vous avez créé dans la tâche 3.

    Sélectionner un pipeline de déploiement

Tâche 5 : créer un déclencheur

Nous devons créer un déclencheur qui appelle lors des transmissions de code.

  1. Accédez à Déclencheurs et cliquez sur Créer un déclencheur.

  2. Sur la page Créer un déclencheur, saisissez les informations suivantes.

    • Connexion source : entrez référentiel de code OCI.
    • Sélectionner un référentiel de code : sélectionnez le référentiel créé dans la tâche 1.
  3. Cliquez sur Ajouter une action et entrez les informations suivantes.

    • Pipeline de build : sélectionnez le pipeline de build créé dans la tâche 4.
    • Evénement : sélectionnez Push.
    • Conditions d'exécution de build : entrez-les en fonction de votre cas d'emploi. Dans cet exemple, nous entrerons les informations suivantes.
      • Branchement source : entrez main.
      • Fichiers à inclure : entrez main.tf.

    Créer un déclencheur

Tâche 6 : tester le flux

Voici le flux de travail que nous avons suivi jusqu'à présent dans le tutoriel.

  1. Transmission de code.
  2. Déclencheur.
  3. Pipeline de build.
  4. Pipeline de déploiement.
  5. Le script shell exécute echo "Running RM apply command".

Confirmez le fonctionnement du workflow avant d'ajouter plus de complexité au script shell.

  1. Propager le nouveau code.

    Code Push

  2. Confirmez le déclenchement du pipeline de build.

    Build en cours

  3. Confirmez le déclenchement du pipeline de déploiement.

    Déploiement en cours

  4. Confirmer l'exécution du script shell

    Le flux de test a réussi

Tout fonctionne comme prévu. La dernière tâche consiste à remodeler notre script shell pour déclencher la pile Resource Manager.

Tâche 7 : modification du script shell pour déclencher la pile Resource Manager

L'exécution d'image de conteneur de préparation de shell inclut des interpréteurs de shell, des utilitaires de shell, des CLI et bien d'autres outils. Pour plus d'informations, reportez-vous à Détails de l'exécution de l'image de conteneur de shell.

Nous tirerons parti de l'interface de ligne de commande OCI pour appeler Resource Manager. Notre script shell ressemble actuellement à ceci :

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Pour modifier le script shell, procédez comme suit :

  1. Créer un travail.

    Le premier appel que nous allons faire est create-apply-job. Cela crée un travail d'application sur notre pile Resource Manager. Nous enregistrerons également le fichier job_id du travail en tant que variable pour référencer le travail à l'étape suivante.

    job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
    

    Pour plus d'informations, reportez-vous à Référence de commande de l'interface de ligne de commande OCI : create-apply-job.

  2. Obtenir le statut du travail.

    Nous devons vérifier si le travail a réussi ou échoué. Pour ce faire, nous transmettons job_id à job get, qui renvoie les propriétés du travail. Plus précisément, nous prenons soin de lifecycle-state.

    job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
    

    Pour plus d'informations, reportez-vous à Référence de commande de l'interface de ligne de commande OCI : job get.

  3. Analysez le statut du travail.

    Ajoutez une logique pour modifier le code de sortie selon que le travail a réussi (0) ou échoué (1).

    if [ $job_state == SUCCEEDED ]; then
      echo "Resource Manager job succeeded"
      exit 0
    else
      echo "Resource Manager job failed"
      exit 1
    fi
    
  4. Après avoir agrégé les étapes précédentes et ajouté des instructions print supplémentaires, votre script shell doit ressembler à ceci :

    version: 0.1
    component: command
    timeoutInSeconds: 1200
    steps:
    - type: Command
      timeoutinSeconds: 900
      name: Invoke RMS
      command: |
        echo "Running RM apply command"
        job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
        echo "RMS plan job id is:"
        echo $job_id
        job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
        echo "Apply job lifecycle-state is:"
        echo $job_state
        if [ $job_state == SUCCEEDED ]; then
          echo "Resource Manager job succeeded"
          exit 0
        else
          echo "Resource Manager job failed"
          exit 1
        fi
    

Remarque : Il s'agit d'un exemple simple montrant les fonctionnalités de base. Vous pouvez personnaliser le script en fonction de vos besoins.

Tâche 8 : Test de bout en bout

Votre architecture et votre flux complets doivent ressembler à ceci :

Diagramme de flux

Confirmer le fonctionnement de l'architecture.

  1. Propager le nouveau code.

    Code Push

  2. Confirmez que le script shell s'exécute correctement.

    Succès du shell

  3. Vérifiez que Terraform a été appliqué.

    Sujet de notification mis à jour

Etapes suivantes

Ce tutoriel a montré comment automatiser les déploiements de pile OCI Resource Manager avec OCI DevOps. Voici un exemple simple montrant le flux de base. Nous vous encourageons à prendre en compte les concepts appris et à les développer, à les adapter à votre cas d'emploi et à les intégrer à vos pipelines CI/CD existants.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.