ansible roles integration with jenkins devops
Un aperçu détaillé des rôles Ansible, de l'intégration avec Jenkins et des modules Ansible S3 et EC2:
Dans la partie 2 du série sur les tutoriels Ansible , nous avons appris comment les playbooks Ans1ible sont utilisés pour exécuter plusieurs tâches et amener toutes les machines ou serveurs cibles à un état souhaité particulier.
Lecture recommandée => Série de formation DevOps exponentielle
Les playbooks Ansible sont principalement des fichiers YAML qui contiennent plusieurs tâches dans un seul fichier énorme qui n'est pas modulaire et réutilisable. Mais si vous avez besoin de fractionner toute votre configuration et d'être plus modulaire et réutilisable, les rôles Ansible vous aideront beaucoup.
Dans ce didacticiel Ansible , nous examinerons les rôles Ansible, intégrerons Ansible à Jenkins pour une livraison continue d'un point de vue DevOps et surtout examinerons les modules Ansible S3 et EC2 pour la gestion des instances AWS EC2 (créer et terminer des instances EC2).
Ce que vous apprendrez:
- Rôles Ansible
- Intégration de Jenkins avec Ansible
- Gérer les objets AWS S3 avec Ansible
- Provisionner une instance AWS EC2 à l'aide d'Ansible
- Arrêt des instances EC2
- Résumé
- lecture recommandée
Rôles Ansible
Avec les rôles Ansible, vous pouvez regrouper vos variables, tâches, gestionnaires, etc., ce qui augmente la réutilisabilité et réduit très certainement les erreurs de syntaxe. Cela aide à désencombrer tout le code.
Les rôles Ansible sont similaires aux modules de Puppet et aux livres de recettes dans Chef.
Pour créer des rôles, vous utilisez le galaxie-ansible commande qui a tous les modèles pour le créer.
Exemple de scénario
J'ai été un spécialiste DevOps pendant la majeure partie de ma vie et j'ai travaillé uniquement en CI et CD.
Ainsi, par exemple dans la livraison continue où je déploie une nouvelle version de mon application J2EE (fichier WAR) pour tomcat, mes étapes seraient les suivantes:
- Arrêtez l'application
- Désinstaller l'application
- Déployer la nouvelle version d'une application
- Démarrez l'application
Je créerais donc un rôle avec au moins 4 tâches et un fichier principal l'appelant. De cette façon, je rend mon code plus modulaire et réutilisable. Appelons donc ce rôle comme matou et créez-le.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Une fois le rôle créé, vous pouvez voir la structure de répertoires qu'il a créée.
Les principaux composants que nous utiliserons dans cette section comprennent:
- tâches / main.yml - Il s'agit du point de départ des tâches créées pour le rôle. Vous pouvez utiliser le fichier main.yml pour pointer vers les autres fichiers de tâches.
- à qui - Ceci permet de définir les variables utilisées.
- méta - Il s'agit de définir des informations sur vous-même ou sur l'auteur.
Étape 1: Créez la liste principale de toutes les tâches
Modifier le tâches / main.yml fichier et ajoutez le code ci-dessous. Conformément à l'exemple de scénario mentionné ci-dessus, nous définissons 4 tâches différentes. Dans la plupart des cas, l'application de déploiement démarrera également l'application, de sorte que la dernière de l'application de démarrage peut ne pas être requise.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Étape 2: Créez les 4 fichiers selon le scénario
Dans les tâches ci-dessous action: ec2_facts est utilisé pour obtenir des faits à partir d'instances EC2 distantes et les appeler dans les jeux / tâches
tâches / fichier stop_app.yml
--- - name: Gather EC2 instance metadata action: ec2_facts - name: Stop application on {{ansible_hostname}} command: wget 'http://{{tomcat_user}}:{{tomcat_pwd}}@{{ansible_ec2_public_ipv4}}:8080/manager/text/ stop ?path=/HelloWorld-Maven' -O - -q
tâches / uninstall_app.yml
--- - name: Gather EC2 instance metadata action: ec2_facts - name: Undeploy application on {{ansible_hostname}} command: wget 'http://{{tomcat_user}}:{{tomcat_pwd}}@{{ansible_ec2_public_ipv4}}:8080/manager/text/undeploy?path=/HelloWorld-Maven' -O - -q
tâches / deploy_app.yml
--- - name: Deploy the new WAR file to target servers copy: src=/var/lib/jenkins/workspace/Demo-Maven-Project/target/HelloWorld-Maven.war dest=/home/ansible/tomcat/webapps
Dans le code de déploiement, si JENKINS est utilisé pour créer le fichier WAR, vous devez fournir le répertoire source du fichier WAR dans le copie module et la destination est l'emplacement des applications Web du serveur cible de tomcat.
tâche / start_app.yml
--- - name: Gather EC2 instance metadata action: ec2_facts - name: Start application on {{ansible_hostname}} command: wget 'http://{{tomcat_user}}:{{tomcat_pwd}}@{{ansible_ec2_public_ipv4}}:8080/manager/text/start?path=/HelloWorld-Maven' -O - -q
Étape 3: définir les variables
Modifier le vars / main.yml fichier et ajoutez le code comme indiqué ci-dessous.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Étape 4: Définissez les informations dans le dossier Meta
Modifiez le fichier meta / main.yml et ajoutez vos informations telles que l'auteur, la description et la société.
compilateur c ++ pour eclipse
galaxy_info: author: V Niranjan description: Devops specialist company:
Étape 5: Créez un fichier principal site.yml
Enfin, créez le fichier principal site.yml pour appeler le rôle créé qui à son tour aidera à déployer l'application sur les serveurs ou une liste d'hôtes selon le fichier d'inventaire. Créez le fichier comme /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Étape 6: Exécutez le fichier de playbook site.yml
$ ansible-playbook site.yml
Lancez l'URL Tomcat pour voir si l'application a été déployée et démarrée.
HTTP: //: portno / manager
Intégration de Jenkins avec Ansible
Dans cette section, nous verrons comment Jenkins peut être intégré à Ansible. Le fichier WAR créé à l'aide du processus de génération sera utilisé pour le déploiement sur Tomcat sur la machine cible à l'aide d'Ansible. Nous allons appeler le rôle Ansible créé dans la section précédente dans Jenkins à l'aide du plugin Ansible.
Ainsi, une fois la construction terminée, le déploiement du fichier WAR sera automatiquement déclenché à l'aide d'Ansible.
Je garde cela simple et n'ai pas configuré Sonar ou Artifactory ou Junit pendant les activités d'intégration continue qui peuvent également être effectuées.
Étape 1: Créez une tâche Jenkins et configurez le référentiel SCM à l'aide du code dans GitHub
Étape 2: configurer la construction
Étape 3: créer un répertoire de rôles dans l'espace de travail Jenkins
Étape 4: Créez le rôle tomcat dans l'emplacement de l'espace de travail Jenkins à l'aide de la commande ci-dessous
$ sudo ansible-galaxy init tomcat –offline
Suivez la procédure comme dans la section précédente pour créer tous les fichiers pour tâches, vars, meta et le site principal.yml.
qu'est-ce qu'une liste chaînée c ++
Le principal site.yml le fichier est créé dans / var / lib / Jenkins / workspace / annuaire.
Étape 5: Configurez l'étape de post-construction de Jenkins pour appeler le playbook Ansible et appeler le fichier site.yml. Sauvegardez le travail.
Étape 6: Déclenchez la tâche de génération et lancez l'URL Tomcat pour vérifier si l'application est déployée correctement.
Gérer les objets AWS S3 avec Ansible
Le module Ansible S3 peut être utilisé pour obtenir ou placer un fichier vers ou depuis un compartiment S3. Pour utiliser ce module, nous devrons installer et configurer voter module de python qui agit comme une API (interface de programme d'application) pour accéder à AWS. Celui-ci doit être installé sur le Machine de contrôle Ansible.
Sur Redhat Linux
$ sudo yum install -y python python-dev python-pip
Sur Ubuntu
$ apt-get install -y python python-dev python-pip
Une fois que ce qui précède est fait, installez boto
$ sudo pip install boto boto3
Si vous ne parvenez pas à installer, vous devrez activer le dépôt EPEL. La procédure se trouve dans la partie 1 de la série d'articles dans la section installation ansible.
Une fois que ce qui précède est fait, nous devons également fournir les informations d'identification des utilisateurs AWS. Vous pouvez exporter les variables d'environnement AWS Access et Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Si, même après avoir défini les variables d'environnement ci-dessus, vous obtenez une erreur car les informations d'identification sont introuvables, vous pouvez également spécifier la même chose dans le playbook.
Voyons maintenant quelques exemples d'utilisation d'Ansible avec des compartiments S3 et plus tard pour créer et terminer des instances.
Exemple 1:Créer un bucket vide avec un dossier
--- - hosts: localhost become: true tasks: - name: Create an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket object=/development mode=create permission=public-read region=ap-south-1
Noter: Ici, le mode est créé pour créer un compartiment et l'autorisation peut être en lecture publique ou en lecture-écriture publique
Exécutez le playbook et affichez le compartiment créé avec le dossier de développement à l'intérieur.
Exemple 2:Pour copier (télécharger) un fichier dans le compartiment S3
--- - hosts: localhost become: true tasks: - name: Copy file to S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansibleniru object=/niru.txt src=/home/ansible/niru.txt mode=put
Ici, l'objet est le fichier créé dans le bucket. Cela peut être un fichier ou un dossier. Dans ce cas, il s'agit d'un fichier. La source est le fichier qui est récupéré sur la machine locale qui est la machine de contrôle Ansible.
Noter:Ici, le mode est mis pour le téléchargement de l'objet
Exécutez le playbook et regardez le compartiment S3.
Exemple 3:Récupérez (téléchargez) le fichier à partir du compartiment S3
--- - hosts: localhost become: true tasks: - name: Download file from S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansibleniru object=/niru.txt dest=/home/ansible/niranjan.txt mode=get
Noter:Ici, le mode est obtenu pour l'objet de téléchargement
Exemple 4:Supprimer un objet ou un fichier du compartiment S3
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket aws_s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket object=/development/niranjan.txt mode=delobj
Noter:Ici, le mode est delobj pour supprimer un objet
Exemple 5:Supprimer un bucket et tout son contenu
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Noter:Ici, le mode est la suppression pour le compartiment de suppression
Provisionner une instance AWS EC2 à l'aide d'Ansible
Enfin, je vais vous laisser avec l'une des fonctionnalités les plus importantes d'Ansible qui est de créer ou de faire tourner une instance AWS EC2 et également comment mettre fin à l'instance. Bien sûr, n'oubliez pas d'installer voter qui est un pré-requis et assure également d'exporter l'utilisateur «AWS_ACCESS_KEY_ID» et «AWS_SECRET_ACCESS_KEY».
Si l'exportation ne fonctionne pas, assurez-vous d'ajouter la même chose dans le code comme indiqué ci-dessous.
comment ouvrir un fichier jnlp
Le code ci-dessous vous montrera comment créer une instance EC2 ainsi que créer un groupe de sécurité et une paire de clés.
- Créer un groupe de sécurité
- Créer une paire de clés et le fichier PEM
- Créer une instance EC2
- Enregistrez l'adresse IP de l'instance EC2 dans le fichier d'inventaire ansible
Je suppose que les utilisateurs effectuant cet exercice connaissent bien les concepts AWS EC2.
Ajoutez le code ci-dessous à un fichier et exécutez le même pour vérifier la création de l'instance EC2 dans la console AWS. Comme le code est volumineux, il est divisé en 2 pages, mais assurez-vous de tout enregistrer dans un seul fichier yml.
--- - hosts: localhost become: true gather_facts: False vars: region: ap-south-1 instance_type: t2.micro ami: ami-5b673c34 # RedHat Linux 7.5 hosts_file: /etc/ansible/hosts tasks: - name: Create security group ec2_group: aws_access_key: aws_secret_key: name: 'vniranjan' description: 'V Niranjan Security Group' region: '{{ region }}' rules: - proto: tcp from_port: 22 to_port: 22 cidr_ip: 0.0.0.0/0 - name: Create an EC2 key ec2_key: aws_access_key: aws_secret_key: name: 'vniranjan' region: '{{ region }}' register: ec2_key - name: Save private key (PEM file) copy: content='{{ec2_key.key.private_key}}' dest=/home/ansible/vniranjan.pem mode=0600 when: ec2_key.changed - name: Create an ec2 instance ec2: aws_access_key: aws_secret_key: key_name: vniranjan group: vniranjan # security group name instance_type: '{{ instance_type}}' image: '{{ ami }}' wait: true region: '{{ region }}' count: 1 # default count_tag: Name: Demo instance_tags: Name: Demo register: ec2 - name: Save IP to inventory file lineinfile: dest: '{{hosts_file}}' insertafter: '(webservers)' line: '{{item.private_ip}}' with_items: '{{ec2.instances}}'
Exécutez le playbook
/ etc / ansible / hosts fichier d'inventaire mis à jour avec une adresse IP privée
Connectez-vous à l'instance
ssh -i 'vniranjan.pem' ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Noter:Cliquez sur l'image ci-dessous pour une vue agrandie)
Groupe de sécurité créé
Paire de clés créée
Arrêt des instances EC2
Dans cette section, en savoir plus sur l'arrêt des instances EC2.
Dans l'écran suivant, vous pouvez voir qu'il y a 2 instances en cours d'exécution et que les étapes de terminaison seraient dans l'ordre suivant:
- Mettre fin aux instances EC2 à l'aide des identifiants d'instance
- Supprimer le groupe de sécurité
- Supprimer la paire de clés
Playbook pour mettre fin aux deux instances EC2
--- - hosts: localhost gather_facts: false connection: local vars: instance_ids: - 'i-05945003313d20603' # Replace these with your EC2 instance id’s - 'i-0ce5ce5820bddf610' region: ap-south-1 keypair_name: vniranjan securitygroup_name: vniranjan tasks: - name: Terminate EC2 instance ec2: aws_access_key: aws_secret_key: instance_ids: '{{instance_ids}}' region: '{{region}}' state: absent wait: true - name: Remove EC2 Key ec2_key: aws_access_key: aws_secret_key: name: '{{keypair_name}}' state: absent region: '{{region}}' - name: Remove Security Group ec2_group: aws_access_key: aws_secret_key: name: '{{securitygroup_name}}' state: absent region: '{{region}}'
Résumé
Aujourd'hui, la plupart des organisations informatiques recherchent une sorte de différenciateurs pour gagner des affaires et les présenter à leurs clients. Je dirais que l'automatisation est certainement l'un des principaux facteurs de différenciation.
Avec des outils comme Ansible, je suis d'avis que vous devriez être capable d'automatiser la plupart des tâches manuelles répétitives.
Ainsi ce que nous en avons appris Série de didacticiels Ansible en 3 parties présente Ansible comme un outil de gestion de configuration très populaire et puissant qui aide dans différents domaines de l'automatisation allant de l'automatisation des tâches, du déploiement d'applications et du provisionnement cloud. Par conséquent, nous parlons principalement d'orchestration informatique.
J'espère que vous avez apprécié la gamme de didacticiels Ansible et je suis sûr que vous auriez déjà acquis d'immenses connaissances sur le concept.
Ensuite, nous apprendrons à intégrer Jenkins à Selenium, qui fait également partie de notre série de formations DevOps.
Tutoriel PREV | Tutoriel SUIVANT
lecture recommandée
- Tutoriel Ansible: Installation et utilisation avec les modules Ansible
- Intégration continue dans DevOps
- Livraison continue dans DevOps
- Intégration de Jenkins avec Selenium WebDriver: tutoriel pas à pas
- Qu'est-ce que le test d'intégration (tutoriel avec exemple de test d'intégration)
- Intégration de Selenium avec JMeter
- Automatisation des tâches à l'aide de playbooks Ansible et de coffres-forts Ansible avec des exemples
- Déploiement continu dans DevOps