Exercice - Configurer votre environnement Azure DevOps

Effectué

Dans cette section, vous allez configurer votre organisation Azure DevOps pour suivre le reste de ce module et créer l’environnement Azure Kubernetes Service où déployer votre application.

Pour atteindre ces objectifs, vous procéderez comme suit :

  • Ajoutez un utilisateur à votre organisation Azure DevOps.
  • Configurez votre projet Azure DevOps.
  • Gérez votre workflow avec Azure Boards.
  • Créer des ressources Azure à l’aide d’Azure CLI.
  • Créer des variables de pipeline dans Azure Pipelines.
  • Créez une connexion de service pour vous authentifier auprès d’Azure.
  • Mettez à jour votre manifeste de déploiement Kubernetes.

Ajout d’un utilisateur à l’organisation

Un abonnement Azure est nécessaire pour suivre ce module. Vous pouvez commencer à utiliser Azure gratuitement.

Bien que cela ne soit pas nécessaire pour travailler avec Azure DevOps, un abonnement Azure est requis pour effectuer le déploiement sur les ressources Azure avec Azure DevOps. Pour simplifier le processus, utilisez le même compte Microsoft pour vous connecter à votre abonnement Azure et à votre organisation Azure DevOps.

Si vous vous connectez à Azure et à Azure DevOps à l’aide de différents comptes Microsoft, vous pouvez continuer en ajoutant un utilisateur à votre organisation DevOps sous le compte Microsoft associé à votre abonnement Azure. Pour plus d’informations, consultez Ajout d’utilisateurs à une organisation ou à un projet. Quand vous ajoutez l’utilisateur, sélectionnez le niveau d’accès De base.

Après avoir ajouté l’utilisateur avec le niveau d’accès De base, déconnectez-vous d’Azure DevOps et reconnectez-vous à l’aide du compte Microsoft associé à votre abonnement Azure.

Obtenir le projet Azure DevOps

Dans cette section, vous exécutez un modèle pour créer votre projet dans Azure DevOps.

Exécuter le modèle

Exécutez le modèle afin de configurer votre projet Azure DevOps pour ce module :

Sur le portail Azure DevOps Demo Generator, procédez comme suit pour exécuter le modèle :

  1. Sélectionnez Se connecter et acceptez les conditions d’utilisation.

  2. Sur la page Créer un projet, sélectionnez votre organisation Azure DevOps, puis indiquez un nom de projet, par exemple Space Game - web - Kubernetes.

    Screenshot of the Azure DevOps Demo Generator showing the process to create the project.

  3. Sélectionnez Oui, je veux dupliquer (fork) ce dépôt, puis Autoriser. Si une fenêtre s’affiche, accordez l’autorisation d’accéder à votre compte GitHub.

    Important

    Il est nécessaire de sélectionner cette option pour que le modèle se connecte à votre référentiel GitHub. Choisissez-la même si vous avez déjà dupliqué (fork) le référentiel Space Game, car le modèle utilisera votre duplication (fork) existante.

  4. Sélectionnez Créer un projet et attendez la fin de l’exécution du modèle, ce qui peut prendre quelques minutes.

  5. Sélectionnez Accéder au projet pour accéder à votre projet dans Azure DevOps.

Important

L’unité Nettoyer votre environnement Azure DevOps de ce module comprend des étapes cruciales pour le nettoyage. Il est recommandé de suivre cette procédure pour éviter d’épuiser les minutes de génération disponibles. Il est important de suivre les étapes de nettoyage même si vous n’effectuez pas le module en totalité.

Définir la visibilité de votre projet

Initialement, votre duplication (fork) du référentiel Space Game sur GitHub est définie sur public, et le projet créé par le modèle Azure DevOps sur privé. Un référentiel public sur GitHub est accessible à tout le monde, tandis qu’un référentiel privé n’est accessible qu’à vous et aux personnes avec lesquelles vous choisissez de le partager. De même, sur Azure DevOps, les projets publics fournissent un accès en lecture seule aux utilisateurs non authentifiés ; dans les projets privés à l’inverse, les utilisateurs doivent se voir accorder un accès et une authentification pour pouvoir accéder aux services.

Il n’est pour le moment pas nécessaire de modifier ces paramètres pour les besoins de ce module. Dans le cadre de vos projets personnels toutefois, vous devez déterminer la visibilité et l’accès que vous souhaitez accorder aux autres. Par exemple, si votre projet est open source, vous pouvez décider de rendre publics votre référentiel GitHub et votre projet Azure DevOps. S’il s’agit au contraire d’un projet privé, il sera pertinent de définir votre référentiel GitHub et votre projet Azure DevOps comme privés.

Vous trouverez peut-être les ressources suivantes utiles par la suite pour déterminer la solution la mieux adaptée à votre projet :

Faire passer l’élément de travail à l’état En cours d’exécution

Dans cette étape, vous allez vous attribuer un élément de travail sur Azure Boards et le faire passer à l’état En cours. En situation réelle, votre équipe et vous devrez créer les éléments de travail au début de chaque sprint ou itération de travail.

L’attribution d’éléments de travail vous fournit une liste de contrôle pour vous servir de point de départ et donne aux autres membres de l’équipe de la visibilité sur votre progression et le travail restant. Cela permet également d’appliquer des limites sur le travail en cours (TEC) pour éviter que votre équipe n’ait trop de travail à traiter à la fois.

  1. Accédez à Boards dans Azure DevOps, puis sélectionnez Boards dans le menu.

    Screenshot of Azure DevOps showing the location of the Boards menu.

  2. Attribuez-vous l’élément de travail Créer une version de site web à plusieurs conteneurs orchestrée avec Kubernetes en sélectionnant la flèche vers le bas située en bas de la carte.

    Screenshot of Azure Boards showing the location of the down arrow.

  3. Glissez-déplacez l’élément de travail de la colonne À faire vers la colonne En cours. Une fois que vous l’aurez terminée, vous allez déplacer la tâche vers la colonne Terminé à la fin de ce module.

    Screenshot of Azure Boards showing the card in the Doing column.

Créer un environnement Azure Kubernetes Service

Dans cette étape, vous créez les ressources Azure Kubernetes Service nécessaires pour déployer la nouvelle version du conteneur du site web.

Dans le module précédent, Créer un pipeline de mise en production avec Azure Pipelines, vous avez utilisé le Portail Azure pour créer des ressources Azure. Bien que le Portail soit utile pour explorer les fonctionnalités Azure et effectuer des tâches de base, la création de composants tels qu’Azure Kubernetes Service peut prendre du temps.

Dans ce module, vous utilisez Azure CLI pour créer les ressources nécessaires au déploiement et à l’exécution de votre application sur Azure Kubernetes Service. Azure CLI est accessible dans un terminal ou avec Visual Studio Code. Cependant, dans ce module, vous accédez à Azure CLI depuis Azure Cloud Shell. Cloud Shell est une expérience d’interpréteur de commandes sur navigateur hébergée dans le cloud, préconfigurée avec Azure CLI pour être utilisée avec votre abonnement Azure.

Important

Vous devez disposer de votre propre abonnement Azure pour effectuer les exercices de ce module.

Lancer Cloud Shell

  1. Accédez au portail Azure et connectez-vous.

  2. Sélectionnez l’option Cloud Shell dans le menu, puis choisissez l’expérience Bash lorsque cela vous est demandé.

    Screenshot of the Azure portal showing the location of the Cloud Shell menu item.

Remarque

Pour conserver les fichiers que vous créez dans Cloud Shell, vous devez disposer d’une ressource de stockage Azure. Quand vous ouvrez Cloud Shell pour la première fois, vous êtes invité à créer un groupe de ressources, un compte de stockage et un partage Azure Files. Cette configuration est automatiquement utilisée pour toutes les futures sessions Cloud Shell.

Sélectionner une région Azure

Une région fait référence à un ou plusieurs centres de données Azure situés dans une zone géographique. Citons par exemple les régions USA Est, USA Ouest et Europe Nord. Chaque ressource Azure, y compris une instance App Service, est associée à une région.

Pour simplifier l’exécution des commandes, commencez par définir une région par défaut. Une fois que vous avez défini une région par défaut, les commandes suivantes utilisent cette région par défaut, sauf si vous spécifiez explicitement une région différente.

  1. Dans Cloud Shell, exécutez la commande suivante pour lister les régions disponibles dans votre abonnement Azure :

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Sélectionnez une région géographiquement proche de vous dans la colonne Nom de la sortie. Par exemple, vous pouvez choisir eastasia ou westus2.

  3. Exécutez la commande suivante pour définir votre région par défaut. Remplacez RÉGION par le nom de celle que vous avez choisie plus tôt.

    az configure --defaults location=<REGION>
    

    Dans cet exemple, westus2 est défini comme région par défaut.

    az configure --defaults location=westus2
    

Créer des variables Bash

Le recours à des variables Bash peut rendre le processus de configuration plus pratique et moins sujet aux erreurs. Cette approche permet d’éviter les fautes de frappe accidentelles en définissant des chaînes de texte partagées comme variables, utilisables tout au long du script.

  1. Dans Cloud Shell, générez un nombre aléatoire afin de simplifier la création de noms globaux uniques pour certains services à l’étape suivante.

    resourceSuffix=$RANDOM
    
  2. Créez des noms globaux uniques pour vos instances Azure Container Registry et Azure Kubernetes Service. Notez que ces commandes utilisent des guillemets doubles, ce qui indique à Bash d’interpoler les variables en utilisant la syntaxe inline.

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. Créez une autre variable Bash pour stocker le nom de votre groupe de ressources.

    rgName='tailspin-space-game-rg'
    
  4. Recherchez la dernière version d’AKS.

    az aks get-versions
    

    Prenez note de la dernière version.

Créer des ressources Azure

Notes

Dans ce tutoriel, les paramètres réseau par défaut sont utilisés à des fins d’apprentissage. Ces paramètres permettent d’accéder à votre site web sur Internet. Dans la pratique cependant, vous pouvez choisir de configurer un réseau virtuel Azure qui place votre site web sur un réseau qui ne prend pas en charge le routage sur Internet, et qui est accessible seulement par votre vous-même et par votre équipe. Par la suite, vous pourrez reconfigurer votre réseau pour rendre le site web accessible à vos utilisateurs.

  1. Exécutez la commande suivante pour créer un groupe de ressources portant le nom que vous avez défini :

    az group create --name $rgName
    
  2. Exécutez la commande az acr create pour créer une instance Azure Container Registry portant le nom que vous avez défini :

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. Exécutez la commande az aks create pour créer une instance AKS avec le nom que vous avez défini auparavant. Remplacez <latest-AKS-version> par la version que vous avez notée précédemment.

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    Remarque

    Le déploiement AKS peut prendre de 10 à 15 minutes.

  4. Créez une variable pour stocker l’ID du principal de service configuré pour l’instance AKS :

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Créez une variable pour stocker l’ID d’Azure Container Registry :

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. Exécutez la commande az acr list pour récupérer l’URL du serveur de connexion de votre instance Azure Container Registry (ACR) :

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    Veillez à prendre note du serveur de connexion de votre registre de conteneurs. Vous avez besoin de cette information ultérieurement, lors de la configuration de votre pipeline. Voici un exemple :

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. Exécutez la commande az role assignment create pour créer une attribution de rôle autorisant le cluster AKS à se connecter à Azure Container Registry :

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

Important

L’unité Nettoyer votre environnement Azure DevOps de ce module comprend des étapes cruciales pour le nettoyage. Il est recommandé de d’effectuer ces étapes pour éviter d’épuiser les minutes de génération gratuites. Même si vous ne terminez pas ce module, il est important de suivre les étapes de nettoyage.

Créer un groupe de variables

Dans cette section, vous allez ajouter une variable à votre pipeline pour stocker le nom de votre instance Azure Container Registry. Nous vous recommandons de définir le nom de votre instance Azure Container Registry comme variable dans la configuration de votre pipeline plutôt que de le coder en dur. Cela rend en effet votre configuration plus réutilisable. Par ailleurs, si le nom de votre instance change, vous pouvez facilement mettre à jour la variable et déclencher votre pipeline sans avoir à modifier votre configuration.

  1. Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.

  2. Sélectionnez Pipelines, puis Bibliothèque dans le volet de navigation gauche.

    Screenshot of Azure Pipelines showing the Library menu option.

  3. Sélectionnez Groupes de variables, puis + Groupe de variables pour ajouter un nouveau groupe de variables.

  4. Dans la section Propriétés, entrez Release comme nom du groupe de variables.

  5. Dans la section Variables, sélectionnez Ajouter.

  6. Entrez RegistryName comme nom de la variable, et le serveur de connexion de votre instance Azure Container Registry (par exemple tailspinspacegame4692.azurecr.io) comme valeur.

  7. En haut de la page, sélectionnez Enregistrer pour enregistrer votre variable de pipeline. Voici un exemple de groupe de variables possible.

    Screenshot of Azure Pipeline showing the variable group. The group contains one variable.

Création de connexions de service

L’étape suivante consiste à créer des connexions de service qui permettent à Azure Pipelines d’accéder à vos instances Azure Container Registry et Azure Kubernetes Service. Grâce à ces connexions de service, Azure Pipelines peut envoyer (push) vos conteneurs et indiquer à votre cluster AKS de les tirer (pull) pour mettre à jour le service déployé.

Important

Vérifiez que vous avez utilisé le même compte Microsoft pour vous connecter au portail Azure et à Azure DevOps.

Création d’une connexion de service Docker Registry

  1. Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.

  2. Dans le coin inférieur de la page, sélectionnez Paramètres du projet.

  3. Sélectionnez Connexions de service dans la section Pipelines.

  4. Sélectionnez Nouvelle connexion de service, puis Registre Docker et Suivant.

  5. En haut de la page, sélectionnez Azure Container Registry, puis Principal de service comme type d’authentification.

  6. Entrez les valeurs suivantes pour chaque paramètre :

    Paramètre Valeur
    Abonnement Votre abonnement Azure
    Registre de conteneurs Azure Sélectionnez celui créé précédemment
    Nom de la connexion de service Connexion au registre de conteneurs
  7. Assurez-vous que la case Autoriser l’accès à tous les pipelines est cochée.

  8. Lorsque vous avez terminé, sélectionnez Enregistrer.

Création d’une connexion de service ARM

Vous allez maintenant créer une connexion de service Azure Resource Manager pour vous authentifier auprès de votre cluster AKS. Nous utilisons une connexion de service ARM au lieu de Kubernetes, car les jetons à longue durée de vie ne sont plus créés par défaut depuis Kubernetes 1.24. Pour plus d’informations, consultez le billet de blog DevOps Aide aux connexions de service pour les clients AKS utilisant des tâches Kubernetes.

  1. Sélectionnez Nouvelle connexion de service, Azure Resource Manager, puis Suivant.

  2. Sélectionnez Principal du service (automatique), puis Suivant.

  3. Sélectionnez Abonnement comme niveau d’étendue.

  4. Entrez les valeurs suivantes pour chaque paramètre.

    Paramètre Valeur
    Abonnement Votre abonnement Azure
    Resource group Sélectionnez celui créé précédemment
    Nom de la connexion de service Connexion au cluster Kubernetes
  5. Assurez-vous que la case Autoriser l’accès à tous les pipelines est cochée.

  6. Lorsque vous avez terminé, sélectionnez Enregistrer.

Création d’un environnement de pipeline

  1. Sélectionnez Pipelines, puis Environnements.

    Screenshot of Azure Pipelines showing the Environments menu option.

  2. Sélectionnez Créer un environnement pour créer un environnement.

  3. Dans le champ Nom, entrez Dev.

  4. Sélectionnez Aucun dans la section Ressource, puis Créer pour créer votre environnement de pipeline.

Mise à jour du manifeste de déploiement Kubernetes

Dans cette section, vous allez mettre à jour le manifeste Kubernetes deployment.yml pour qu’il pointe vers le registre de conteneurs que vous avez créé précédemment.

  1. Accédez à votre compte GitHub et sélectionnez le dépôt que vous avez dupliqué (fork) pour ce module : mslearn-tailspin-spacegame-web-kubernetes.

  2. Ouvrez le fichier manifests/deployment.yml en mode d’édition.

    Screenshot of GitHub showing the location of the edit mode icon.

  3. Modifiez les références de l’image conteneur pour utiliser votre serveur de connexion ACR. Le manifeste suivant prend comme exemple tailspinspacegame2439.azurecr.io.

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. Validez les modifications apportées à votre branche main.