Tutoriel : Déployer sur une machine virtuelle Linux à l’aide de Jenkins et d’Azure DevOps Services

L’intégration continue (CI) et le déploiement continu (CD) constituent un pipeline via lequel vous pouvez générer, mettre en production et déployer votre code. Azure DevOps Services fournit un ensemble complet d’outils d’automatisation CI/CD pour le déploiement sur Azure. Jenkins est un outil serveur CI/CD tiers populaire qui propose également l’automatisation CI/CD. Vous pouvez utiliser Azure DevOps Services et Jenkins ensemble pour personnaliser la façon dont vous proposez votre service ou application cloud.

Dans ce didacticiel, vous allez utiliser Jenkins pour générer une application web Node.js. Vous utilisez ensuite Azure DevOps pour la déployer

dans un groupe de déploiement qui contient des machines virtuelles Linux. Vous allez apprendre à effectuer les actions suivantes :

  • Obtenir l’exemple d’application.
  • Configurer les plug-ins Jenkins.
  • Configurer un projet libre (Freestyle) Jenkins pour Node.js.
  • Configurer Jenkins pour l’intégration Azure DevOps Services.
  • Créer un point de terminaison de service Jenkins.
  • Créer un groupe de déploiement pour les machines virtuelles Azure.
  • Créer un pipeline de mise en production Azure Pipelines.
  • Exécuter des déploiements déclenchés manuellement ou par CI.

Prérequis

Obtenir l’exemple d’application

Vous devez déployer une application, stockée dans un dépôt Git. Pour ce didacticiel, nous vous recommandons d’utiliser cet exemple d’application disponible sur GitHub. Ce didacticiel contient un exemple de script qui est utilisé pour l’installation de Node.js et d’une application. Si vous souhaitez utiliser votre propre dépôt, vous devez configurer un exemple similaire.

Dupliquez cette application et notez son emplacement (URL) pour pouvoir l’utiliser ultérieurement dans ce didacticiel. Pour plus d’informations, consultez Fork a repo (Dupliquer un dépôt).

Remarque

L’application a été générée à l’aide de Yeoman. Elle utilise Express, bower et Grunt. Elle contient certains packages npm utilisés comme dépendances. L’exemple contient également un script qui configure Nginx et déploie l’application. Il est exécuté sur les machines virtuelles. Plus précisément, le script effectue les actions suivantes :

  1. Il installe Node, Nginx et PM2.
  2. Il configure Nginx et PM2.
  3. Il démarre l’application Node.

Configurer les plug-ins Jenkins

Tout d’abord, vous devez configurer deux plug-ins Jenkins : NodeJS et VS Team Services Continuous Deployment.

  1. Ouvrez votre compte Jenkins et sélectionnez Manage Jenkins (Gérer Jenkins).
  2. Dans la page Manage Jenkins (Gérer Jenkins), sélectionnez Manage Plugins (Gérer les plug-ins).
  3. Filtrez la liste pour trouver le plug-in NodeJS, puis sélectionnez l’option Install without restart (Installer sans redémarrage). Adding the NodeJS plug-in to Jenkins
  4. Filtrez la liste pour trouver le plug-in VS Team Services Continuous Deployment, puis sélectionnez l’option Install without restart (Installer sans redémarrage).
  5. Revenez au tableau de bord Jenkins et sélectionnez Manage Jenkins (Gérer Jenkins).
  6. Sélectionnez Global Tool Configuration (Configuration globale d’outils). Recherchez NodeJS et sélectionnez NodeJS installations (Installations NodeJS).
  7. Sélectionnez l’option Install automatically (Installer automatiquement), puis entrez un nom dans Name.
  8. Sélectionnez Enregistrer.

Configurer un projet libre (Freestyle) Jenkins pour Node.js

  1. Sélectionnez Nouvel élément. Saisissez un nom d’élément.
  2. Sélectionnez Freestyle project (Projet libre). Cliquez sur OK.
  3. Sous l’onglet Source Code Management (Gestion du code source), sélectionnez Git et entrez les détails du dépôt et de la branche où se trouve le code de votre application.
    Add a repo to your build
  4. Sous l’onglet Build Triggers (Générer des déclencheurs), sélectionnez Poll SCM (Interroger SCM) et entrez la planification H/03 * * * * pour interroger le dépôt Git sur les modifications toutes les trois minutes.
  5. Sous l’onglet Environnement de build, sélectionnez Fournir le chemin d’accès du nœud et du dossier npm, puis sélectionnez la valeur d’installation de NodeJS. Laissez npmrc file (fichier npmrc) défini sur use system default (utiliser les valeurs système par défaut).
  6. Sous l’onglet Build (Générer), sélectionnez Execute shell (Exécuter Shell) et entrez la commande npm install pour vous assurer que toutes les dépendances sont mises à jour.

Configurer Jenkins pour l’intégration Azure DevOps Services

Remarque

Vérifiez que le jeton d’accès personnel (PAT) que vous allez utiliser pour les étapes suivantes contient l’autorisation de mise en production Release (lecture, écriture, exécution et gestion) dans Azure DevOps Services.

  1. Créez un jeton PAT dans votre organisation Azure DevOps Services si vous n’en avez pas. Jenkins requiert ces informations pour accéder à votre organisation Azure DevOps Services. Veillez à stocker les informations sur le jeton qui seront nécessaires dans les prochaines étapes de cette section.

    Pour découvrir comment générer un jeton, consultez Créer un jeton d’accès personnel pour Azure DevOps Services.

  2. Sous l’onglet Post-build Actions (Actions post-build), sélectionnez Add post-build action (Ajouter une action post-build). Sélectionnez Archive the artifacts (Archiver les artefacts).

  3. Sous Files to archive (Fichiers à archiver), entrez **/* pour inclure tous les fichiers.

  4. Pour créer une autre action, sélectionnez Add post-build action (Ajouter une action post-build).

  5. Sélectionnez Trigger release in TFS/Team Services (Déclencher la mise en production dans TFS/Team Services). Entrez l’URI de votre organisation Azure DevOps Services, par exemple https://{nom-de-votre-organisation}.visualstudio.com.

  6. Entrez le Nom du produit.

  7. Choisissez un nom pour le pipeline de mise en production. (Vous créerez ce pipeline de mise en production plus tard dans Azure DevOps Services.)

  8. Choisissez les informations d’identification pour vous connecter à votre environnement Azure DevOps Services ou Azure DevOps Server :

    • Laissez le champ Username (Nom d’utilisateur) vide si vous utilisez Azure DevOps Services.
    • Entrez un nom d’utilisateur et un mot de passe si vous utilisez une version locale d’Azure DevOps Server.
      Configuring Jenkins post-build actions
  9. Enregistrez le projet Jenkins.

Créer un point de terminaison de service Jenkins

Un point de terminaison de service permet à Azure DevOps Services de se connecter à Jenkins.

  1. Ouvrez la page Services dans Azure DevOps Services, ouvrez la liste Nouveau point de terminaison de service et sélectionnez Jenkins. Add a Jenkins endpoint
  2. Attribuez un nom à cette connexion.
  3. Entrez l’URL de votre serveur Jenkins et sélectionnez l’option Accepter les certificats SSL non fiables. Exemple d’URL : http://{votre-URL-Jenkins}.westcentralus.cloudapp.azure.com.
  4. Entrez le nom d’utilisateur et le mot de passe de votre compte Jenkins.
  5. Sélectionnez Vérifier la connexion pour vérifier que les informations sont correctes.
  6. Sélectionnez OK pour créer le point de terminaison de service.

Créer un groupe de déploiement pour les machines virtuelles Azure

Vous avez besoin d’un groupe de déploiement pour inscrire l’agent Azure DevOps Services et permettre le déploiement du pipeline de mise en production sur votre machine virtuelle. Avec les groupes de déploiement, vous pouvez facilement définir des groupes logiques de machines cibles pour le déploiement et installer l’agent nécessaire sur chaque machine.

Remarque

Dans la procédure suivante, veillez à installer les composants requis et de ne pas exécuter le script avec des privilèges sudo.

  1. Ouvrez l’onglet Versions du hub Build &Release, ouvrez les groupes de déploiement, puis sélectionnez + Nouveau.
  2. Entrez un nom pour le groupe de déploiement, et éventuellement une description. Sélectionnez ensuite Créer.
  3. Sélectionnez le système d’exploitation pour votre machine virtuelle cible de déploiement. Par exemple, sélectionnez Ubuntu 16.04+.
  4. Sélectionnez Utiliser un jeton d’accès personnel dans le script pour l’authentification.
  5. Sélectionnez le lien Prérequis système. Installez les composants requis pour votre système d’exploitation.
  6. Sélectionnez Copier le script dans le Presse-papiers pour copier le script.
  7. Connectez-vous à votre machine virtuelle cible de déploiement et exécutez le script. N’exécutez pas le script avec des privilèges sudo.
  8. Après l’installation, vous êtes invité à confirmer les étiquettes du groupe de déploiement. Acceptez les valeurs par défaut.
  9. Dans Azure DevOps Services, recherchez la machine virtuelle que vous venez d’inscrire dans Cibles sous Groupes de déploiement.

Créer un pipeline de mise en production Azure Pipelines

Un pipeline de mise en production spécifie le processus qu’Azure Pipelines utilise pour déployer l’application. Dans cet exemple, vous exécutez un script Shell.

Pour créer le pipeline de mise en production dans Azure Pipelines :

  1. Ouvrez l’onglet Versions du hub Build &Release , puis sélectionnez Créer un pipeline de mise en production.
  2. Sélectionnez le modèle Vide en choisissant de démarrer avec un processus Vide.
  3. Dans la section Artefacts, sélectionnez + Ajouter un artefact, puis sélectionnez Jenkins sous Type de source. Sélectionnez votre connexion de point de terminaison de service Jenkins. Sélectionnez ensuite le travail source Jenkins, puis sélectionnez Ajouter.
  4. Sélectionnez les points de suspension à côté de la zone Environnement 1. Sélectionnez Phase d’ajout d’un groupe de déploiement.
  5. Sélectionnez votre groupe de déploiement.
  6. Sélectionnez + pour ajouter une tâche à Phase de groupe de déploiement.
  7. Sélectionnez la tâche Script Shell et sélectionnez Ajouter. La tâche Script Shell fournit la configuration d’un script à exécuter sur chaque serveur pour installer Node.js et démarrer l’application.
  8. Dans Chemin d’accès du script, entrez $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.
  9. Sélectionnez Avancé, puis Spécifier le répertoire de travail.
  10. Dans Répertoire de travail, entrez $(System.DefaultWorkingDirectory)/Fabrikam-Node.
  11. Changez le nom du pipeline de mise en production par le nom que vous avez spécifié sous l’onglet Actions post-build de l’application générée dans Jenkins. Jenkins exige que ce nom soit en mesure de déclencher une nouvelle mise en production lorsque les artefacts source sont mis à jour.
  12. Sélectionnez Enregistrer, puis sélectionnez OK pour enregistrer le pipeline de mise en production.

Exécuter des déploiements déclenchés manuellement ou par CI

  1. Sélectionnez + Mise en production et sélectionnez Créer une mise en production.
  2. Sélectionnez la build que vous avez générée dans la liste déroulante en surbrillance, puis sélectionnez File d’attente.
  3. Dans le message qui s’affiche, sélectionnez le lien de la mise en production. Par exemple : « Mise en production Mise en production-1 a été créé. ».
  4. Ouvrez l’onglet Journaux d’activité pour surveiller la sortie de console de mise en production.
  5. Dans votre navigateur, ouvrez l’URL de l’un des serveurs que vous avez ajoutés à votre groupe de déploiement. Par exemple, entrez http://{adresse-ip-de-votre-serveur}.
  6. Accédez au dépôt Git source et modifiez le contenu du titre h1 dans le fichier app/views/index.jade en apportant quelques corrections au texte.
  7. Validez votre modification.
  8. Après quelques minutes, vous verrez une nouvelle mise en production sur la page Mises en production d’Azure DevOps. Ouvrez la mise en production pour voir le déploiement en action. Félicitations !

Résolution des problèmes liés aux plug-ins Jenkins

Si vous constatez un bogue dans les plug-ins Jenkins, signalez le problème dans Jenkins JIRA en sélectionnant le composant concerné.

Étapes suivantes

Dans ce didacticiel, vous avez automatisé le déploiement d’une application Azure en utilisant Jenkins pour la génération et Azure DevOps Services pour la mise en production. Vous avez appris à :

  • Générer votre application dans Jenkins.
  • Configurer Jenkins pour l’intégration Azure DevOps Services.
  • Créer un groupe de déploiement pour les machines virtuelles Azure.
  • Créer un pipeline Azure qui configure les machines virtuelles et déploie l’application.

Pour savoir comment utiliser Azure Pipelines lors des étapes de génération et de publication, consultez cet article.

Pour savoir comment créer un pipeline CI/CD basé sur YAML en vue du déploiement sur des machines virtuelles, passez au tutoriel suivant.