Dans mon article précédent, j'ai plongé dans le monde fascinant des microservices - Modèles d'architecture de microservices, partie 1 : Modèles de décomposition . C'était le début de ma série complète d'articles sur les microservices et leurs modèles.
Bien que l'étape logique serait de continuer avec la partie 2 de cette série, j'ai décidé que la prochaine chose que j'aimerais explorer et vous parler est le processus vital de fourniture transparente de ces microservices à l'utilisateur final.
CI/CD est une technique permettant de fournir des applications aux clients, obtenue en ajoutant l'automatisation aux différentes étapes du développement des applications. Je pense que comprendre le CI/CD (Intégration continue et déploiement continu) peut permettre aux développeurs de mieux comprendre comment les artefacts du projet backend existent au-delà des limites du référentiel du projet. Cette compréhension peut également créer un changement fondamental dans la perspective d'un développeur. Au lieu de simplement considérer leur travail comme des lignes de code, ils peuvent commencer à considérer le contexte plus large de leur projet comme un produit de valeur.
Dans cet article, nous visons à démystifier le processus CI/CD grâce à une application pratique. Nous vous guiderons à travers un didacticiel étape par étape, le décomposant module par module, où vous créerez manuellement un pipeline CI/CD. Pour ce faire, nous exploiterons la puissance des outils DevOps contemporains tels qu'AWS, Docker, Kubernetes, Ansible, Git, Apache Maven et Jenkins . Alors commençons ce voyage !
Ce module est dédié à la création d'une instance de serveur virtuel AWS EC2. Dans le cadre de cet article, vous allez configurer trois instances EC2 pour Jenkins, Ansible et Kubernetes. Pour l'instant, vous pouvez passer aux modules suivants et revoir ce module dans les sections « [module 2] : Jenkins », « [module 6] : Ansible » et « [module 7] : Kubernetes ».
Accédez à https://aws.amazon.com.
Cliquez sur le bouton Créer un compte AWS .
Suivez les instructions sur la page Web de création de compte.
Accédez à https://console.aws.amazon.com/console/home. Cliquez sur le bouton Se connecter .
Entrez toutes les informations d'identification nécessaires sur cette page Web.
Recherchez EC2 dans la zone de recherche.
Choisissez Serveur virtuel EC2 en cliquant sur Service EC2 .
Cliquez sur le bouton Lancer l'instance .
Accédez à la section « Nom et tags » .
Fournissez un nom pour une nouvelle instance de serveur virtuel AWS EC2 dans la section « Nom » .
Vous pouvez également ajouter des balises supplémentaires pour votre serveur virtuel en cliquant sur « Ajouter des balises supplémentaires » .
Accédez à la section « Images d'application et de système d'exploitation (Amazon Machine Image) » .
Pour jouer GRATUITEMENT avec le serveur virtuel :
Allez dans la section « Type d'instance » .
Pour jouer GRATUITEMENT avec le serveur virtuel :
Sélectionnez un type avec la balise éligible à l'offre gratuite dans la section Type d'instance .
Pour moi, c'est t2.micro (Family: t2 1cCPU 1 GiB Memory Current Generation:true) .
Accédez à la section « Configurer le stockage » .
Pour jouer GRATUITEMENT avec le serveur virtuel :
Ne modifiez pas les paramètres par défaut. Les clients éligibles au niveau gratuit peuvent obtenir 30 Go de stockage EBS à usage général (SSD) ou magnétique .
Accédez à la section « Paramètres réseau » .
Vous devez configurer la sécurité de votre serveur virtuel. Pour faire ça,
Par défaut, votre serveur virtuel est accessible via ( Type - SSH, Protocole - TCP, Port - 22 ). Si vous avez besoin de types de connexion supplémentaires, ajoutez-les en ajoutant des règles de groupe de sécurité entrantes supplémentaires.
Rendez-vous dans la section « Bi-clé (Connexion) » .
Créez une nouvelle paire de clés si vous ne l'avez pas encore créée.
Si vous n'avez pas encore créé de « paire de clés » :
Lancez l'instance du serveur virtuel EC2 en cliquant sur le bouton « Lancer l'instance » .
Une fois le processus de création de l'instance de serveur virtuel EC2 terminé, vous verrez ce qui suit.
Ensuite, vous devez vous rendre dans la section « Instances » en cliquant sur le bouton « Afficher toutes les instances » .
Vous pouvez maintenant voir que votre instance de serveur virtuel AWS EC2 est en cours d'exécution.
Maintenant, configurons JenkinsServer sur l'instance de serveur virtuel EC2.
Vous avez besoin d'un serveur virtuel pour exécuter Jenkins.
Suivez les instructions de la section [Module 1] : AWS EC2 Virtual Server de ce didacticiel pour terminer cette étape et créer une instance de serveur virtuel EC2 portant le nom JenkinsServer.
N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à Jenkins et SSH de fonctionner respectivement sur les ports 8080 et 22 .
Utilisez le nom « JenkinsServer » pour distinguer votre instance de serveur virtuel EC2.
Créez le groupe de sécurité « CI_CD_Pipeline » et « CI_CD_Pipeline_Key_Pair » pour une nouvelle instance AWS EC2 « JenkinsServer » . Vous pouvez les réutiliser plus loin dans l'article.
Accédez à la page d'accueil de la console AWS → Tableau de bord de la console de gestion EC2 → Instances.
Ensuite, vous devez choisir JenkinsServer puis cliquer sur le bouton « Connecter » .
Ensuite, vous verrez cette page Web. Vous devez à nouveau cliquer sur le bouton « Connecter » .
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
Vous devez maintenant télécharger Jenkins sur votre instance de serveur virtuel EC2.
Suivez ces instructions :
Accédez à la page Web de téléchargement de Jenkins.
Vous pouvez voir les options de versions stables (LTS) et régulières (hebdomadaires). Choisissez l'option Red Hat/Fedora/Alma/Rocky/CentOS LTS.
Vous verrez cette page Web.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
Jenkins est maintenant téléchargé.
Pour terminer l'installation de Jenkins, nous devons importer la clé Jenkins.
Pour importer la clé Jenkins, nous devons copier la commande « sudo rpm.. » et l'exécuter.
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
De cette façon, le gestionnaire de packages « rpm » peut vérifier que les packages Jenkins que vous installez sont exactement ceux publiés par le projet Jenkins, et qu'ils n'ont pas été falsifiés ou corrompus.
Pour exécuter Jenkins, nous devons installer Java sur notre instance de serveur virtuel EC2.
Pour installer Java , utilisez cette commande.
sudo amazon-linux-extras install java-openjdk11 -y
Vérifiez si Java a été installé correctement à l'aide de cette commande :
java -version
Vous verrez quelque chose comme ça.
Pour exécuter Jenkins, vous devez installer fontconfig sur notre instance de serveur virtuel EC2.
Utilisez cette commande.
sudo yum install fontconfig java-11-openjdk -y
Fontconfig est une bibliothèque conçue pour fournir une configuration, une personnalisation et un accès aux applications à l'échelle du système. C'est requis par Jenkins car Jenkins possède des fonctionnalités qui restituent les polices.
Au cours des étapes précédentes, vous avez configuré votre instance de serveur virtuel EC2 pour utiliser un référentiel Jenkins spécifique, puis vous avez importé la clé GPG associée à ce référentiel. Maintenant, vous devez exécuter la commande qui recherchera tous les référentiels connus, y compris celui de Jenkins que vous avez ajouté, pour trouver le package Jenkins. Une fois qu'il aura trouvé le package Jenkins dans le référentiel Jenkins, il le téléchargera et l'installera.
Exécutons cette commande.
sudo yum install jenkins -y
Vous pouvez démarrer Jenkins en utilisant cette commande.
sudo systemctl start jenkins
Pour vérifier que Jenkins est en cours d'exécution, utilisez cette commande.
sudo systemctl status jenkins
Vous verrez le résultat tel qu'il est sur la capture d'écran ci-dessous :
Jenkins devrait maintenant être opérationnel.
Pour accéder à l'application Jenkins, ouvrez n'importe quel navigateur Web et saisissez l'adresse IP publique ou le nom de domaine de votre instance EC2 suivi du port 8080.
http://<your-ec2-ip>:8080
La première fois que vous accéderez à Jenkins, il sera verrouillé avec un mot de passe généré automatiquement.
Vous devez afficher ce mot de passe à l'aide de la commande suivante.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Copiez ce mot de passe, revenez à votre navigateur, collez-le dans le champ Mot de passe administrateur et cliquez sur « Continuer ».
Ensuite, vous pourrez voir cette page Web.
Maintenant, vous pouvez utiliser votre serveur Jenkins.
Maintenant que Jenkins fonctionne correctement, vous pouvez commencer à créer le pipeline Jenkins. Pour créer un pipeline Jenkins, vous devez créer un nouveau « projet Freestyle ». Pour créer un nouveau « projet Freestyle », vous devez accéder au tableau de bord Jenkins et cliquer sur le bouton « Nouvel élément » .
Entrez le nom du « projet Freestyle » Github (le nom du « pipeline » sera utilisé plus loin) puis cliquez sur le bouton « OK » .
Fournissez ensuite la description du pipeline.
Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer ». Après cela, cela signifie que vous avez créé les bases du pipeline qui va être construit dans ce tutoriel.
Maintenant que Jenkins s'exécute sur l'instance de serveur virtuel AWS EC2, vous pouvez configurer Git avec le pipeline.
Git est un système de contrôle de version distribué (VCS) gratuit et open source conçu pour aider les équipes logicielles à suivre chaque modification du code dans un type spécial de base de données. Si une erreur est commise, les développeurs peuvent revenir en arrière et comparer les versions antérieures du code pour aider à corriger l'erreur tout en minimisant les perturbations pour tous les membres de l'équipe. VCS est particulièrement utile pour
Git, en tant que système de contrôle de version le plus populaire, nous permet d'extraire le dernier code du référentiel Github de votre projet vers votre instance de serveur virtuel EC2 sur laquelle votre Jenkins est installé.
Utilisez cette commande pour installer Git.
sudo yum install git -y
Vérifiez maintenant que Git fonctionne à l’aide de cette commande.
git --version
Maintenant, Git fonctionne correctement sur l'instance de serveur virtuel EC2.
Comme Git fonctionne correctement sur l'instance de serveur virtuel EC2, nous pouvons maintenant intégrer Jenkins à Git.
Pour démarrer cette intégration, installons le plugin Jenkins Github.
Accédez à la section du tableau de bord Jenkins.
Cliquez sur le bouton « Gérer Jenkins » puis cliquez sur le bouton « Gérer les plugins » .
Cliquez sur le bouton « Plugins disponibles » .
Recherchez la zone de recherche du plugin Github .
Sélectionnez le plug-in Github .
Sélectionnez le plug-in Github . Et puis cliquez sur le bouton « Installer sans redémarrage » .
Attendez la fin du téléchargement du plugin Github.
Oui! Le plugin Jenkins Github est installé.
Maintenant que le plugin GitHub Jenkins est installé, vous pouvez configurer ce plugin pour enfin intégrer Jenkins à Git. Pour ce faire, vous devez revenir à la page principale en cliquant sur le bouton « Revenir à la page d'accueil ».
Ensuite, sur la page principale, vous devez cliquer sur le bouton « Gérer Jenkins » puis cliquer sur le bouton « Configuration globale de l'outil » .
Ensuite, sur la page Web Global Tool Configuration, vous devez accéder à la section Git.
Dans la section Git, vous devez configurer Git en fournissant le nom et le chemin d'accès à Git sur l'ordinateur.
Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer » **.**
Ici, vous avez terminé de configurer le plugin Jenkins Github.
Maintenant que le plugin Jenkins Github est installé et configuré, vous pouvez désormais utiliser ce plugin dans votre pipeline. Cela permettra à votre pipeline que vous avez créé dans le module 2 d'extraire le code de votre projet du référentiel GitHub spécifié.
Eh bien, pour intégrer ce plugin dans votre pipeline, vous devez vous rendre dans la section Gestion du code source et choisir Git dans votre pipeline. Ensuite, vous devez fournir l'URL du référentiel de votre projet. Si le référentiel de votre projet est public sur Github, vous n'avez pas besoin de fournir d'informations d'identification. Si le référentiel du projet est privé sur Github, vous devez fournir des informations d'identification.
Vous pouvez utiliser mon projet avec la prochaine URL du référentiel : https://github.com/Sunagatov/Hello.git .
Copiez-le et collez-le simplement dans l'entrée « URL du référentiel » . Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration de Git avec le pipeline.
Vous pouvez désormais utiliser votre pipeline mis à jour pour extraire un projet de Github. Pour ce faire, vous devez cliquer sur le bouton **« Construire maintenant »**. En conséquence, vous verrez une build réussie dans l’historique des builds.
Ouvrez la première build à partir de l’historique des builds.
Vous pouvez maintenant voir le résultat réussi du premier build. Si vous ouvrez votre terminal AWS EC2. Vous pouvez vérifier que le pipeline fonctionne bien.
Utilisez simplement cette commande.
cd /var/lib/jenkins/workspace/{your pipeline name}
De cette façon, vous pouvez voir que votre projet de Github a été transféré vers votre instance de serveur virtuel AWS EC2.
Apache Maven est un outil d'automatisation de build et de gestion de projet largement utilisé dans le développement de logiciels. Il rationalise le processus de compilation, de test et de packaging du code en gérant les dépendances du projet et en fournissant un cycle de vie de construction cohérent. Maven utilise des fichiers de configuration basés sur XML (fichiers POM) pour définir la structure, les dépendances et les tâches du projet, permettant ainsi aux développeurs de gérer et de déployer efficacement des projets logiciels complexes.
Maintenant que vous avez intégré Git dans le pipeline, vous pouvez améliorer davantage le pipeline en incorporant Apache Maven, qui vous permet de créer, tester et empaqueter votre projet. Pour ce faire, vous devez installer Apache Maven sur votre instance de serveur virtuel AWS EC2 sur laquelle Jenkins et Git ont été installés.
Pour télécharger Apache Maven, allez dans le répertoire «/opt» .
cd /opt
Et puis utilisez cette commande.
sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
Cette commande téléchargera la dernière version officielle d'Apache Maven (vérifiez la dernière version sur le site officiel d'Apache Maven). Pour trouver la dernière version officielle d'Apache Maven, utilisez le lien https://maven.apache.org/download.cgi .
Utilisez cette commande pour extraire Apache Maven de l'archive téléchargée :
sudo tar -xvzf apache-maven-*.tar.gz
Accédez au dossier racine à l’aide de cette commande.
cd ~
Modifiez le fichier .bash_profile à l'aide de cette commande.
vi .bash_profile
Ajoutez les variables JAVA_HOME et M2_HOME.
Attribuez le chemin d'accès au JDK11 pour JAVA_HOME et le chemin d'accès au répertoire maven pour la variable M2_HOME .
Pour trouver le chemin du JDK, utilisez cette commande.
sudo find / -name java
Comment utiliser VIM
Enregistrez les modifications.
Ensuite, exécutez cette commande pour actualiser les variables système.
source .bash_profile
Pour vérifier $PATH , utilisez cette commande.
echo $PATH
Pour vérifier Apache Maven , utilisez cette commande.
mvn -v
Si vous avez tout fait correctement, vous pourrez visualiser la version d'Apache Maven.
Étant donné qu'Apache Maven peut être utilisé sur une instance EC2, vous pouvez installer le plugin Apache Maven pour l'intégrer au pipeline.
Pour y parvenir, suivez ces étapes :
Attendez la fin du processus de téléchargement.
Et puis cliquez sur le bouton « Revenir à la page d'accueil » .
Avec l'installation réussie du plugin Apache Maven Jenkins, vous pouvez désormais utiliser ce plugin dans le pipeline que vous avez créé et mis à jour dans les modules 2 et 3.
Pour ce faire, procédez comme suit :
Allez ensuite dans la section « Maven » . Cliquez sur le bouton « Ajouter Maven » . Décochez « Installer automatiquement ».
Ajoutez ensuite le nom et le chemin MAVEN_HOME .
Cliquez sur les boutons « Appliquer » et « Enregistrer » .
Ici, vous avez terminé de configurer le plugin Apache Maven Jenkins.
Maintenant que le plugin Apache Maven GitHub est installé et configuré, vous pouvez désormais utiliser Apache Maven dans votre pipeline. Cela permettra à votre pipeline que vous avez créé dans le « [module 2] : Jenkins Server » de construire le code de votre projet pour créer un artefact jar.
Pour intégrer Apache Maven dans le pipeline, vous devez suivre ces étapes :
Enfin, vous devez cliquer sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration d'Apache Maven avec le pipeline.
Vous pouvez désormais utiliser votre pipeline mis à jour pour créer votre projet Github. Pour ce faire, vous devez cliquer sur le bouton **« Construire maintenant »**. En conséquence, vous verrez un résultat de travail réussi dans l’historique de construction.
Si vous ouvrez votre terminal AWS EC2. Vous pouvez vérifier que le pipeline fonctionne bien.
Utilisez simplement cette commande.
cd /var/lib/jenkins/workspace/{your pipeline name}/target
De cette façon, vous pouvez voir l'artefact JAR, indiquant la réussite de la construction de votre projet à partir de GitHub.
Créons maintenant une nouvelle instance EC2 avec le nom « Ansible Server » sur laquelle vous allez installer Docker et Ansible.
Utilisez les instructions de la section « Lancer une instance de serveur virtuel AWS EC2 » de ce didacticiel pour terminer cette étape. N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à Docker et SSH de fonctionner respectivement sur les ports 8080 et 22.
Cliquez sur le bouton « Connecter ».
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
sudo chown ansible-admin:ansible-admin /opt/docker
Vous devez maintenant installer Docker sur votre instance Ansible EC2. Pour ce faire, vous devez créer un nouveau dossier Docker.
sudo mkdir /opt/docker
Ensuite, installez Docker en exécutant la commande suivante.
sudo yum install docker -y
Vous devez ajouter l'utilisateur actuel « ansible-admin » au groupe Docker sur le serveur virtuel EC2 « AnsibleServer » pour accorder les privilèges d'administrateur Docker.
sudo usermod -a -G docker ansible-admin
Vous devrez vous déconnecter et vous reconnecter pour que ces modifications prennent effet.
Ensuite, vous pouvez exécuter la commande suivante
id ansible-admin
pour voir que le nouvel utilisateur Docker existe.
Maintenant que Docker est installé sur l'instance Ansible EC2, vous pouvez le lancer en exécutant la commande suivante.
sudo systemctl start docker
Une fois Docker démarré, vous pouvez exécuter la commande suivante
sudo systemctl status docker
pour voir que Docker est actif et fonctionne maintenant.
Dans la version finale du pipeline, le processus impliquera la création d'une nouvelle image Docker à partir de votre projet GitHub et sa transmission vers Docker Hub. Pour ce faire, votre projet GitHub doit contenir un Dockerfile.
Si vous avez utilisé le projet « Hello » qui était proposé dans le module « [Module 3] : Git et Github » , alors vous n'avez pas besoin de créer un nouveau Dockerfile car ce référentiel de projet contenait déjà Dockerfile.
FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]
Si vous avez utilisé votre propre référentiel de projet et qu'il ne contenait pas de Dockerfile, vous devrez créer un nouveau Dockerfile.
Pour créer un nouveau Dockerfile, exécutez la commande suivante, qui créera le nouveau fichier.
sudo touch Dockerfile
Vous pouvez ensuite remplir ce fichier avec une séquence de commandes décrivant comment créer un environnement d'application conteneurisé. Ces commandes incluent des actions telles que la copie de fichiers dans l'image, l'installation de logiciels, la définition de variables d'environnement et la configuration du conteneur.
Pour remplir le Dockerfile avec ces commandes, exécutez la commande suivante.
vim Dockerfile
Le Dockerfile est prêt à être utilisé.
Maintenant que votre Dockerfile est prêt à être utilisé, copiez l'artefact JAR de votre projet à partir de l'instance EC2 **"JenkinsServer"** et collez-le sur l'instance EC2 "AnsibleServer" . Il est important de noter que ce transfert sera davantage automatisé à travers le pipeline.
En complétant cette étape, vous serez prêt à tester votre Dockerfile ainsi que l'environnement Docker que vous avez configuré.
Avant de commencer les tests, assurez-vous de vous authentifier sur Dockerhub. Exécutez la commande suivante.
docker login
Cette commande vous demandera de fournir vos informations de connexion Dockerhub, y compris votre nom d'utilisateur et votre mot de passe.
Avec cela, vous avez terminé le processus de connexion à Docker et êtes maintenant prêt à procéder aux tests.
Une fois votre connexion réussie à Dockerhub terminée, vous êtes maintenant prêt à commencer à tester le Dockerfile que vous avez préparé.
Exécutez cette commande pour créer une image Docker.
docker build -t hello:latest .
Ensuite, exécutez la commande suivante pour établir une balise qui facilitera le téléchargement de l'image sur Dockerhub :
docker tag hello:latest zufarexplainedit/hello:latest
Enfin, procédez au transfert de l'image Docker vers Dockerhub en exécutant cette commande.
docker push zufarexplainedit/hello:latest
En suivant ces étapes, accédez à votre compte Dockerhub pour vérifier si vous pouvez voir une nouvelle image ou non.
Vous devriez maintenant constater que l'image a été effectivement ajoutée. Ce résultat confirme la réussite de l'installation de l'environnement Docker et que votre Dockerfile est correct.
Configurons maintenant le serveur Ansible sur l'instance de serveur virtuel EC2.
Vous avez besoin d'un serveur virtuel pour exécuter Ansible.
Suivez les instructions de la section [Module 1] : AWS EC2 Virtual Server de ce didacticiel pour terminer cette étape et créer une instance de serveur virtuel EC2 pour Ansible.
N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à Ansible et SSH de fonctionner respectivement sur les ports 8080 et 22 .
Utilisez le nom « AnsibleServer » pour distinguer votre instance de serveur virtuel EC2.
Vous pouvez réutiliser le groupe de sécurité « CI_CD_Pipeline » et « CI_CD_Pipeline_Key_Pair » pour une nouvelle instance EC2 « AnsibleServer » .
Accédez à la page d'accueil de la console AWS → Tableau de bord de la console de gestion EC2 → Instances → AnsibleServer.
Cliquez ensuite sur le bouton « Connecter » .
Ensuite, vous verrez cette page Web. Vous devez à nouveau cliquer sur le bouton « Connecter » .
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
Configurons maintenant Ansible Server sur l'instance de serveur virtuel EC2.
La première chose que vous devez faire lorsque vous souhaitez configurer AnsibleServer sur une instance de serveur virtuel EC2 est de modifier son nom d'hôte.
Faisons-le. Exécutez cette commande pour ouvrir le fichier de nom d'hôte :
sudo vi /etc/hostname
Vous devriez voir quelque chose comme ceci :
Remplacez ce nom d'hôte par « ansible-server ». Ensuite, redémarrez-le.
sudo init 6
Ajoutons maintenant un nouvel utilisateur ansible-admin à l'instance de serveur virtuel AWS EC2.
Pour ce faire, utilisez cette commande :
sudo useradd ansible-admin
Ensuite, définissez le mot de passe pour l'utilisateur ansible-admin .
sudo passwd ansible-admin
Vous devez également configurer les privilèges utilisateur en modifiant le fichier sudoers .
sudo visudo
Ajoutez « ansible-admin ALL=(ALL) ALL » à ce fichier sudoers .
Vous devez également modifier le fichier /etc/ssh/sshd_config pour activer l'authentification par mot de passe.
sudo vi /etc/ssh/sshd_config
Ensuite, vous devez recharger le service pour confirmer ces modifications.
sudo service sshd reload
À la suite de l'exécution de cette commande, vous verrez :
Vous pouvez maintenant utiliser cette commande pour éviter d'ajouter sudo pour toutes les autres commandes.
sudo su - ansible-admin
Vous envisagez de gérer des serveurs distants tels que les instances de serveur virtuel K8s EC2 plus loin dans cet article. C'est pourquoi vous devez configurer des clés SSH.
ssh-keygen
À la suite de l'exécution de cette commande, vous verrez :
Les clés SSH sont désormais générées et prêtes à être utilisées.
Vous pouvez maintenant installer Ansible sur votre instance de serveur virtuel EC2 « AnsibleServer » .
Faisons-le.
Exécutez cette commande pour installer Ansible.
sudo amazon-linux-extras install ansible2
Pour vérifier Ansible, utilisez cette commande :
ansible --version
À la suite de l'exécution de cette commande, vous verrez :
Comme Ansible est installé sur votre instance de serveur virtuel EC2 « AnsibleServer » , vous pouvez configurer Jenkins pour l'intégrer à Ansible. Vous devez installer le plugin « Publier via SSH » pour intégrer Jenkins à l'instance de serveur virtuel EC2 sur laquelle Ansible est installé et à d'autres instances de serveur virtuel EC2 sur lesquelles Kubernetes est installé.
Allez dans « Tableau de bord » → « Gérer Jenkins » → « Configurer le système » → « Plugins disponibles » .
Saisissez ensuite « Publier via SSH » dans le champ de recherche.
Cliquez sur le bouton « Installer sans redémarrage » . Attendez la fin du processus de téléchargement.
Le plugin « Publier via SSH » est désormais installé sur l'instance de serveur virtuel Jenkins EC2.
Avec l'installation réussie du plugin Apache Maven Jenkins, vous pouvez désormais utiliser ce plugin dans le pipeline que vous avez créé et mis à jour dans les modules 2 et 3.
Pour ce faire, procédez comme suit :
Allez dans « Tableau de bord » → « Gérer Jenkins » → « Configurer le système » → « Publier via SSH » .
Entrez toutes les données requises telles qu'elles figurent sur la capture d'écran, y compris le nom d'hôte, le nom d'utilisateur et la clé privée (ou le mot de passe le cas échéant).
Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer » .
Ici, vous avez terminé de configurer le plugin Jenkins « Publier via SSH » .
Ensuite, cliquez sur « Tester la configuration » pour valider que le plugin fonctionne correctement.
Sur le côté gauche, vous pouvez voir que l'état de configuration du plugin de test est « Succès ». Cela signifie que la configuration du plugin est correcte.
Vous devez créer un nouveau dossier sur l'instance AnsibleServer EC2 où le JAR du projet sera stocké. Ce pot sera utilisé ultérieurement pour créer une image Docker.
Commençons.
Accédez au dossier « /opt » dans l’instance AnsibleServer EC2.
cd /opt
Créez-y un nouveau dossier « docker » .
sudo mkdir docker
Donnez des privilèges à ce dossier « docker » .
sudo chown ansible-admin:ansible-admin docker
Maintenant, vérifiez les privilèges du dossier « docker » en exécutant cette commande.
ll
Vous pouvez voir que le dossier « docker » est accessible avec l'utilisateur « ansible-admin » .
Maintenant que le plugin Github « Publier via SSH » est installé et configuré, vous pouvez maintenant l'intégrer dans le pipeline que vous avez créé dans le « [module 2] : Jenkins Server » pour transférer un artefact jar de projet de « JenkinsServer » vers "AnsibleServeur" .
Eh bien, pour intégrer le plugin Github « Publier via SSH » dans le pipeline, vous devez suivre ces étapes :
Enfin, vous devez cliquer sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration du plugin « Publier via SSH » avec le pipeline.
Vous pouvez désormais utiliser votre pipeline mis à jour pour transférer un artefact jar de projet de « JenkinsServer » vers « AnsibleServer » . Pour ce faire, vous devez cliquer sur le bouton « Construire maintenant » . En conséquence, vous verrez un résultat de travail réussi dans l’historique de construction.
Si vous ouvrez votre terminal AWS EC2 « AnsibleServer » . Vous pouvez vérifier que le pipeline fonctionne bien.
Utilisez simplement cette commande.
cd /opt/docker
De cette façon, vous pouvez voir l'artefact JAR, indiquant la réussite de la construction de votre projet à partir de GitHub.
Lorsque vous exécutez un playbook Ansible, vous spécifiez les hôtes sur lesquels il doit s'exécuter. Vous pouvez le faire de deux manières :
hosts
sur une liste d'adresses IP ou de noms d'hôtes./etc/ansible/hosts
.
En modifiant /etc/ansible/hosts
, vous pouvez facilement gérer des groupes d'hôtes sans avoir à écrire leurs adresses IP à chaque fois que vous exécutez un playbook.
Découvrons l'hôte de l'instance AnsibleServer EC2 en exécutant la commande suivante.
sudo ifconfig
Après avoir découvert l'hôte de l'instance AnsibleServer EC2, vous pouvez l'ajouter au fichier hôtes Ansible en exécutant la commande suivante.
sudo vi /etc/ansible/hosts
Vous pouvez également ajouter « [ansible] » comme référence
Si vous gérez un cluster de serveurs et que vous souhaitez appliquer un playbook à chacun d'entre eux, au lieu de spécifier l'adresse IP de chaque serveur dans le playbook, vous pouvez simplement ajouter tous les serveurs à un groupe dans le fichier d'inventaire, puis spécifier le groupe dans le playbook.
Ansible est conçu pour automatiser les tâches sur des serveurs distants. L'authentification SSH sans mot de passe permet à Ansible de se connecter à ces serveurs sans avoir besoin de saisir manuellement un mot de passe.
Exécutez cette commande pour créer une connexion sécurisée de votre ordinateur à un autre ordinateur (comme celui à l'adresse IP 172.31.34.41), en utilisant la clé SSH de l'utilisateur ansible-admin.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Dans mon cas, cela ressemble à ceci.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
Vous pouvez maintenant voir « Nombre de clé(s) ajoutée(s) : 1 » . Cela signifie que l'installation de l'authentification SSH sans mot de passe a été terminée avec succès.
Maintenant qu'Ansible est configuré et prêt à fonctionner, vous pouvez créer un nouveau playbook Ansible pour votre pipeline. Ce playbook permettra à Ansible de créer et d'envoyer une nouvelle image Docker à Dockerhub.
Voici comment procéder :
touch hello-app.yml
hello-app.yml
. Ouvrez-le pour le modifier avec cette commande. vi hello-app.yml
--- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest
Le playbook Ansible pour les tâches Docker est prêt à être utilisé.
Avec Ansible, Ansible playbook, AnsibleServer et JenkinsServer tous correctement configurés, il est temps de tester le playbook Ansible.
Accédez à l’emplacement de votre playbook Ansible.
cd /opt/docker
Ensuite, exécutez la commande suivante.
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
Une fois terminé, vous verrez le résultat de l’exécution réussie de votre playbook Ansible.
De plus, prenez un moment pour visiter votre compte Dockerhub et vérifiez si une nouvelle image est désormais visible.
Vous devriez voir l'image nouvellement ajoutée. Ce résultat confirme que votre playbook Ansible est correct.
Maintenant que le plugin Github « Publier via SSH » , Ansible et Docker sont installés et configurés, vous pouvez désormais tous les intégrer dans le pipeline que vous avez créé dans le « [module 2] : Jenkins Server » pour transférer un artefact jar de projet. de « JenkinsServer » à « AnsibleServer » , puis créez une nouvelle image Docker à partir de votre projet, puis transférez cette image Docker sur Dockerhub.
Pour y parvenir, vous devez suivre ces étapes :
Enfin, cliquez sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration des tâches Ansible Docker avec le pipeline.
Vous pouvez maintenant tester votre pipeline mis à niveau pour transférer de manière transparente un artefact jar de projet de « JenkinsServer » vers « AnsibleServer » , puis créer une nouvelle image Docker à partir de votre projet, puis transférer cette image Docker sur Dockerhub. Pour ce faire, vous devez cliquer sur le bouton « Construire maintenant » . En conséquence, vous verrez un résultat de travail réussi dans l’historique de construction.
De plus, prenez un moment pour visiter votre compte Dockerhub et vérifiez si une nouvelle image est désormais visible.
Vous devriez voir l'image nouvellement ajoutée. Ce résultat confirme que votre playbook Ansible avec les tâches Docker a été intégré avec succès dans le pipeline.
Configurons maintenant les K8 sur l'instance EC2. Vous allez créer une nouvelle instance EC2 et installer leur outil de ligne de commande kubectl pour interagir davantage avec un cluster Kubernetes .
Utilisez les instructions de la section « Lancer une instance de serveur virtuel AWS EC2 » de ce didacticiel pour terminer cette étape.
N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à tous les outils et SSH de fonctionner respectivement sur les ports 8080 et 22 .
Utilisez le nom « K8sServer » pour distinguer votre instance de serveur virtuel EC2.
Vous pouvez réutiliser le groupe de sécurité « CI_CD_Pipeline » et « CI_CD_Pipeline_Key_Pair » pour une nouvelle instance EC2 « K8sServer » .
Cliquez sur le bouton « Connecter ».
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
La première chose que vous devez faire lorsque vous souhaitez configurer KuberenetesServer sur une instance de serveur virtuel EC2 est de modifier son nom d'hôte.
Faisons-le. Exécutez cette commande pour ouvrir le fichier de nom d'hôte :
sudo vi /etc/hostname
Vous devriez voir quelque chose comme ça.
Remplacez ce nom d'hôte par « kubernetes-server », puis redémarrez-le.
sudo init 6
Votre nom d'hôte a été modifié.
Utilisez cette commande pour vérifier la version AWS .
aws --version
De cette façon, vous pouvez voir votre version actuelle d'Aws-cli.
Si vous voyez la version aws-cli/1.18 , vous devez télécharger la dernière version.
Maintenant que vous avez découvert que vous disposez d'une ancienne version d'Aws-cli sur votre instance EC2, vous devez la mettre à jour. Pour cela, accédez à AWS → Documentation → AWS Command Line Interface → Guide de l'utilisateur pour la version 2.
Copiez-collez la commande curl .
Tout d'abord, exécutez cette commande pour télécharger awscli version 2.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
Attendez que le processus de téléchargement commence.
Vous devriez voir quelque chose comme ça.
Deuxièmement, vous devez exécuter cette commande pour décompresser l'archive awscli version 2.
unzip awscliv2.zip
Troisièmement, vous devez exécuter cette commande pour installer awscli version 2.
sudo ./aws/install
Ensuite, rechargez le terminal en ligne de l'instance de serveur virtuel Kubernetes EC2.
Ensuite, utilisez cette commande pour vérifier la version AWS
aws --version
Vous pouvez voir que aws cli a aws-cli/2.
Kubectl est un outil de ligne de commande fondamental pour interagir avec n'importe quel cluster Kubernetes, quelle que soit l'infrastructure sous-jacente. Il vous permet de gérer les ressources, de déployer des applications, de configurer la mise en réseau, d'accéder aux journaux et d'effectuer diverses autres tâches au sein d'un cluster Kubernetes.
Vous devez maintenant installer l'outil de ligne de commande kubectl pour interagir davantage avec un cluster Kubernetes. Pour cela, vous devez accéder à AWS → Documentation → Amazon EKS → Guide de l'utilisateur → Installation ou mise à jour de kubectl → Linux .
Ou cliquez simplement sur le lien https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html .
Tout d’abord, exécutez cette commande pour télécharger kubectl.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
Attendez le processus de téléchargement.
Vous verrez quelque chose comme ça.
Donnez la permission à kubectl.
chmod +x kubectl
Déplacez kubectl vers le dossier /usr/local/bin.
sudo mv kubectl /usr/local/bin
Vérifiez la version de kubectl.
kubectl version --output=yaml
Eksctl est un autre outil de ligne de commande spécifiquement adapté au service Amazon EKS. Eksctl peut être utilisé pour créer des clusters AWS EKS, gérer des groupes de nœuds et effectuer des tâches spécifiques à EKS, telles que l'intégration avec des rôles IAM et d'autres services AWS en supprimant une grande partie de la configuration et de la gestion de l'infrastructure AWS.
Exécutez la commande pour télécharger kubectl.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
Déplacez eksctl vers le dossier /usr/local/bin.
sudo mv /tmp/eksctl /usr/local/bin
Vérifiez la version d'eksctl.
eksctl version
Tu devrais voir la version
Vous devez créer un rôle IAM et l'attacher à votre instance EC2 « KubernetesServer » .
Pour ce faire, vous devez trouver EC2 dans la zone de recherche.
Choisissez EC2 Virtual Server en cliquant sur le lien https://us-east-1.console.aws.amazon.com/ec2/ .
Accédez au tableau de bord IAM → Rôles .
Cliquez sur le bouton « Créer un rôle » sur la page Web des rôles IAM .
Choisissez ensuite « Service AWS », « EC2 ». Et cliquez sur le bouton « Suivant » .
Ensuite, recherchez « AmazonEC2FullAccess » , « AmazonEC2FullAccess » , « IAMFullAccess » et « AWSCloudFormationFullAccess » dans la zone de recherche, puis cliquez sur le bouton « Ajouter des autorisations » .
Et puis cliquez sur le bouton « Suivant » .
Tapez ensuite « Eksctl_Role » dans l’entrée « Nom du rôle » .
Et cliquez sur le bouton « Créer un rôle » .
Le rôle est enfin créé.
Accédez à la page Web de l'instance AWS EC2. Choisissez « KuberbetesServer ». Cliquez ensuite sur « Actions » → « Sécurité » → « Modifier le rôle IAM ».
Choisissez « Eksctl_Role » , puis cliquez sur le bouton « Mettre à jour le rôle IAM » .
Votre rôle IAM est désormais connecté à votre outil « EKS_Server » et eksctl.
Un cluster Amazon EKS (Elastic Kubernetes Service) est un environnement Kubernetes géré sur AWS, automatisant des tâches d'infrastructure complexes telles que la configuration, la mise à l'échelle et la maintenance. Il est essentiel car il fournit une plate-forme efficace, sécurisée et optimisée pour AWS pour le déploiement, la gestion et la mise à l'échelle d'applications conteneurisées, rationalisant les opérations et permettant aux développeurs de se concentrer sur le codage plutôt que sur la gestion de l'infrastructure sous-jacente.
Il est maintenant temps de configurer votre cluster EKS.
Pour y parvenir, suivez ces étapes :
eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>
Par exemple, dans mon cas, cela ressemble à ceci.
eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro
Exécutez la commande modifiée et attendez patiemment la fin du processus de création du cluster. Vous remarquerez que l'état du cluster EKS est indiqué comme « création » sur la page Web AWS CloudFormation.
La procédure de création de cluster prend généralement environ 20 minutes. Une fois terminé, le terminal affichera le résultat du processus.
De plus, vous pouvez vérifier l'état de création réussie du cluster EKS sur la page Web AWS CloudFormation.
Un fichier YAML de déploiement Kubernetes est un script de configuration écrit au format YAML qui définit comment gérer et maintenir une application ou un service spécifique au sein d'un cluster Kubernetes. Il encapsule les instructions permettant d'orchestrer le déploiement, la mise à l'échelle, la mise à jour et la surveillance des conteneurs exécutant l'application. Ce fichier comprend des détails tels que l'image du conteneur, le nombre souhaité de répliques, les limites de ressources, les variables d'environnement, les paramètres réseau, etc. Lorsqu'il est appliqué à un cluster Kubernetes, le fichier YAML de déploiement garantit l'état souhaité de l'application, en gérant automatiquement la création, la mise à l'échelle et la récupération des conteneurs pour maintenir le niveau souhaité de disponibilité et de fiabilité.
Maintenant que le cluster Kubernetes, eksctl et kubectl sont installés et configurés, vous pouvez créer un fichier yaml de déploiement Kubernetes.
Vous pouvez le faire en exécutant la commande suivante.
touch hello-app-deployment.yaml
Ensuite, modifiez ce fichier en exécutant la commande suivante.
vi hello-app-deployment.yaml
Ajoutez ce contenu au hello-app-deployment.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
Hello-app-deployment.yaml est maintenant créé et prêt à être utilisé.
Un fichier YAML du service Kubernetes est un script de configuration écrit au format YAML qui définit une abstraction réseau pour un ensemble de pods, permettant d'y accéder de manière cohérente au sein d'un cluster Kubernetes. Ce fichier décrit comment le service doit être découvert, accessible et équilibré en charge par d'autres services ou clients externes. Il comprend des spécifications telles que le type de service (ClusterIP, NodePort, LoadBalancer), les numéros de port, les sélecteurs pour identifier les pods, etc. Lorsqu'il est appliqué à un cluster Kubernetes, le fichier Service YAML crée une adresse IP et un port virtuels qui acheminent le trafic vers les pods appropriés, en faisant abstraction des modifications de pod sous-jacentes et en fournissant un point de terminaison stable pour la communication, permettant une connectivité transparente et une mise à l'échelle dynamique.
Une fois le cluster Kubernetes, eksctl et kubectl installés et configurés, vous pouvez créer le fichier yaml du service Kubernetes.
Pour ce faire, vous devez créer un fichier yaml du service Kubernetes en exécutant la commande suivante.
touch hello-app-service.yaml
Ensuite, modifiez ce fichier en exécutant la commande suivante.
vi hello-app-service.yaml
Ajoutez ce contenu au hello-app-deployment.yaml.
apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer
Hello-app-service.yaml est maintenant créé et prêt à être utilisé.
Une fois votre cluster Kubernetes EKS installé et configuré avec succès, et votre service Kubernetes et vos fichiers de déploiement prêts, il est temps de tester les choses à l'aide des commandes kubectl.
Appliquer le déploiement.
Utilisez la commande suivante pour appliquer la configuration de déploiement.
kubectl apply -f hello-app-deployment.yaml
Cela créera un déploiement avec le nombre spécifié de réplicas et une stratégie de mise à jour continue, garantissant la disponibilité et la gérabilité de votre application.
2. Appliquer le service.
Ensuite, appliquez la configuration du service.
kubectl apply -f hello-app-service.yaml
Cela mettra en place un service de type LoadBalancer, exposant votre application à Internet.
Notez que le provisionnement du LoadBalancer et l'acquisition d'une adresse IP externe peuvent prendre un certain temps.
Vérifiez l'état de LoadBalancer.
Surveillez l'état de votre service en utilisant.
kubectl get service zufarexplainedit-hello-app-service
Lorsqu'une IP externe est attribuée, vous êtes presque prêt à accéder à votre application.
Accédez à votre candidature.
À l’aide d’un navigateur Web, saisissez l’adresse IP externe attribuée suivie de :8080. Après un bref instant, la page se chargera, affichant le message « HelloWorld ». Gardez à l’esprit que le chargement initial peut prendre quelques secondes.
Lorsque vous avez besoin de ranger les ressources dans votre environnement Kubernetes, vous pouvez utiliser les commandes kubectl suivantes pour supprimer efficacement les déploiements, les pods et les services.
1. Supprimez tous les déploiements .
Pour supprimer tous les déploiements, vous pouvez utiliser la commande suivante.
kubectl delete deployments --all
Cette action garantit qu'aucune instance de déploiement active n'est laissée dans votre cluster.
2. Supprimez tous les modules .
Si vous devez supprimer tous les pods, qu'ils soient gérés par un déploiement ou non, vous pouvez utiliser la commande suivante.
kubectl delete pods --all
La suppression des pods peut vous aider à réinitialiser l'état de votre cluster ou à préparer de nouveaux déploiements.
3. Supprimez tous les services .
Pour nettoyer les services qui exposent vos applications au réseau, vous pouvez utiliser la commande suivante.
kubectl delete services --all
La suppression de services peut impliquer des temps d'arrêt, alors réfléchissez aux implications avant de continuer.
Pour supprimer toutes les ressources associées au cluster Amazon EKS spécifié créé avec eksctl
, y compris les nœuds de travail, les composants réseau et d'autres ressources, vous pouvez utiliser la commande suivante.
eksctl delete cluster --name {your cluster name} --region {your region name}
Pour moi c'est.
eksctl delete cluster --name zufarexplainedit --region eu-north-1
Assurez-vous d'être certain d'arrêter le cluster, car cette action est irréversible et entraînera une perte de données.
Ajoutons maintenant un nouvel utilisateur ansible-admin à l'instance de serveur virtuel AWS EC2 « KubernetesServer » .
Pour ce faire, utilisez cette commande.
sudo useradd ansible-admin
Ensuite, définissez le mot de passe pour l'utilisateur ansible-admin .
sudo passwd ansible-admin
Vous devez également configurer les privilèges utilisateur en modifiant le fichier sudoers .
sudo visudo
Ajoutez « ansible-admin ALL=(ALL) ALL » à ce fichier sudoers .
Vous devez également modifier le fichier /etc/ssh/sshd_config pour activer l'authentification par mot de passe.
sudo vi /etc/ssh/sshd_config
Ensuite, vous devez recharger le service pour apporter ces modifications.
sudo service sshd reload
À la suite de l'exécution de cette commande, vous verrez :
Vous pouvez maintenant utiliser cette commande pour éviter d'ajouter sudo pour toutes les autres commandes.
sudo su - ansible-admin
Vous envisagez de gérer des serveurs distants tels que l'instance de serveur virtuel K8s EC2 plus loin dans cet article. C'est pourquoi vous devez configurer des clés SSH.
ssh-keygen
À la suite de l'exécution de cette commande, vous verrez :
Les clés SSH sont désormais générées et prêtes à être utilisées.
Ansible est conçu pour automatiser les tâches sur des serveurs distants. L'authentification SSH sans mot de passe permet à Ansible de se connecter à ces serveurs sans avoir besoin de saisir manuellement un mot de passe.
Exécutez cette commande pour créer une connexion sécurisée de votre ordinateur à un autre ordinateur (comme celui à l'adresse IP 172.31.34.41), en utilisant la clé SSH de l'utilisateur ansible-admin.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Dans mon cas, cela ressemble à ceci.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
Vous pouvez maintenant voir « Nombre de clé(s) ajoutée(s) : 1 » . Cela signifie que l'installation de l'authentification SSH sans mot de passe a été terminée avec succès.
Lorsque vous exécutez un playbook Ansible, vous spécifiez les hôtes sur lesquels il doit s'exécuter. Dans cette étape, vous devez spécifier l'hôte de l'instance KubernetesServer EC2. Pour ce faire, vous devez répéter les mêmes étapes que celles que vous avez suivies dans « [Module 6] : Ansible ».
Découvrons l'hôte de l'instance KubernetesServer EC2 en exécutant la commande suivante.
sudo ifconfig
Après avoir trouvé l'hôte de l'instance KubernetesServer EC2, vous pouvez l'ajouter au fichier d'hôtes Ansible en exécutant la commande suivante.
sudo vi /etc/ansible/hosts
Vous pouvez également ajouter « [kubernetes] » comme référence
Maintenant que Kubernetes est configuré et prêt à fonctionner, vous pouvez créer un nouveau playbook Ansible avec des tâches Kubernetes pour votre pipeline. Ce playbook permettra à Ansible d'exécuter votre application sur le cluster Kubernetes avec les commandes kubectl.
Voici comment procéder :
touch kubernetes-hello-app.yml
hello-app.yml
. Ouvrez-le pour le modifier avec cette commande. vi kubernetes-hello-app.yml
--- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app
Le playbook Ansible pour les tâches Kubernetes est prêt à être utilisé.
Maintenant que Kubernetes, Ansible et Ansible playbook pour les tâches Kubernetes sont tous configurés et prêts à fonctionner, vous pouvez l'intégrer à Jenkins.
Accédez à JenkinsServer → Tableau de bord Jenkins → Nouvel élément.
Créez un nouveau projet Jenkins Freestyle avec le nom « CD-Job ».
Cliquez sur le bouton « OK ».
Accédez à la section « Actions post-construction ».
Cliquez sur le bouton « Ajouter une action post-construction ».
Choisissez l’option « Envoyer les artefacts de build via SSH ».
Choisissez « AnsibleServer » comme serveur SSH.
Ajoutez cette commande à l’entrée « commande exécutable ».
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
Cliquez sur les boutons « Appliquer » et « Enregistrer ».
Accédez au tableau de bord Jenkins → « CI_CD_Pipeline » → Configurer → section « Actions post-build ».
Cliquez sur le bouton « Ajouter une action post-construction ».
Choisissez l’option « Construire d’autres projets ».
Allez dans la section « Construire d’autres projets ».
Choisissez l’option « Déclencher uniquement si la construction est stable ».
Ajoutez « CD-Job » à l’entrée « Projet à construire ».
Cliquez sur les boutons « Appliquer » et « Enregistrer ».
Vous pouvez désormais considérer que le pipeline est complètement terminé et prêt à être utilisé.
Il est maintenant temps de tester la version finale du pipeline.
Accédez à Jenkins → Tableau de bord Jenkins → « CI_CD_Pipeline ».
Cliquez sur le bouton "Construire maintenant".
Pour voir les résultats, consultez les journaux de la console de build.
Vous remarquerez que le "CD-Job" a été déclenché dans les journaux de la console de build et que le statut final est marqué comme SUCCÈS.
4
De plus, vous pouvez vous rendre sur Dockerhub pour confirmer l'ajout de la nouvelle image Docker.
Et enfin, vous pouvez accéder à votre application à l'aide d'un navigateur Web. Saisissez l'adresse IP externe attribuée suivie de ":8080". Après un bref instant, la page se chargera, affichant le message « HelloWorld ».
Bravo pour la mise en place de ce pipeline CI/CD moderne !
Vous avez fait un travail formidable et vous êtes un véritable héros !
Merci pour tous vos efforts!
Zufar Sunagatov est un ingénieur logiciel senior expérimenté, passionné par la conception de systèmes logiciels modernes.