ansible roles integration with jenkins devops
En djupgående titt på Ansible Roles, Integration with Jenkins och Ansible S3 and EC2 modules:
I del 2 av serie om Ansible tutorials , vi lärde oss hur Ans1ible-spelböcker används för att utföra flera uppgifter och få alla målmaskiner eller servrar till ett visst önskat tillstånd.
Rekommenderad läsning => Exponential DevOps Training Series
Ansible playbooks är främst YAML-filer som innehåller flera uppgifter i en enda enorm fil som inte är modulär och återanvändbar. Men om du behöver bryta upp hela din konfiguration och vara mer modulär och återanvändbar kommer Ansible-roller att hjälpa mycket.
I denna Ansible Tutorial , vi kommer att titta på Ansible-roller, Integrera Ansible med Jenkins för kontinuerlig leverans från DevOps-synvinkel och viktigast av allt titta på Ansible S3- och EC2-moduler för hantering av AWS EC2-instanser (Skapa och avsluta EC2-instanser).
Vad du kommer att lära dig:
- Ansible Rolles
- Jenkins Integration med Ansible
- Hantera AWS S3-objekt med Ansible
- Tillhandahålla en AWS EC2-instans med Ansible
- Avsluta EC2-instanser
- Sammanfattning
- Rekommenderad läsning
Ansible Rolles
Med Ansible-roller kan du gruppera dina variabler, uppgifter, hanterare etc., vilket ökar återanvändbarheten och säkert minskar syntaxfel. Det hjälper till att störa hela koden.
Ansynliga roller liknar moduler i Puppet och kokböcker i Chef.
För att skapa roller använder du ansible-galaxy kommando som har alla mallar för att skapa det.
Exempel Scenario
Jag har varit DevOps-specialist under större delen av mitt liv och har bara arbetat inom CI och CD.
Så till exempel i kontinuerlig leverans där jag distribuerar en ny version av min J2EE-applikation (WAR-fil) för att tomkatta skulle mina steg vara följande:
- Stoppa ansökan
- Avinstallera programmet
- Distribuera den nya versionen av en applikation
- Starta applikationen
Så jag skulle skapa en roll med minst fyra uppgifter och en huvudfil som kallar den. På så sätt gör jag min kod mer modulär och återanvändbar. Så låt oss kalla den rollen som hankatt och skapa det.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
När rollen har skapats kan du se katalogstrukturen som den har skapat.
De viktigaste komponenterna vi kommer att använda i detta avsnitt inkluderar:
- uppgifter / main.yml - Detta är utgångspunkten för uppgifter som skapats för rollen. Du kan använda main.yml-filen för att peka på andra uppgiftsfiler.
- vars - Detta är för att definiera alla variabler som används.
- meta - Detta är för att definiera information om dig själv eller författaren.
Steg 1: Skapa huvudlistan över alla uppgifter
Redigera uppgifter / main.yml filen och lägg till koden nedan. Enligt exemplet ovan nämnts definierar vi fyra olika uppgifter. I de flesta fall startar applikationen även applikationen så att den sista i startprogrammet kanske inte krävs.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Steg 2: Skapa alla de 4 filerna enligt scenariot
I uppgifterna nedan åtgärd: ec2_facts används för att få fakta från avlägsna EC2-instanser och kalla dem i spel / uppgifter
uppgifter / stop_app.yml-fil
--- - 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
uppgifter / avinstallera_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
uppgifter / 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
I distributionskoden om JENKINS används för att bygga WAR-filen måste du ange källkatalogen för WAR-filen i kopiera modulen och destinationen är målserverns webbappsplats för tomcat.
uppgift / 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
Steg 3: Definiera variabler
Redigera vars / main.yml filen och lägg till koden enligt nedan.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Steg 4: Definiera information i metamappen
Redigera meta / main.yml-filen och lägg till din information som författare, beskrivning och företag.
mp3 gratis nedladdningar för Android-telefoner
galaxy_info: author: V Niranjan description: Devops specialist company:
Steg 5: Skapa en main site.yml-fil
Slutligen skapa den huvudsakliga site.yml-filen för att anropa den skapade rollen som i sin tur hjälper till att distribuera applikationen till servrarna eller en lista över värdar enligt lagerfilen. Skapa filen som /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Steg 6: Kör playbook file site.yml
$ ansible-playbook site.yml
Starta Tomcat URL för att se om applikationen har distribuerats och startats.
HTTP: //: portnr / manager
Jenkins Integration med Ansible
I det här avsnittet kommer vi att se hur Jenkins kan integreras med Ansible. WAR-filen byggd med hjälp av byggprocessen kommer att användas för att distribuera till Tomcat på målmaskinen med Ansible. Vi kommer att ringa Ansible-rollen som skapades i föregående avsnitt i Jenkins med Ansible-plugin.
Så när byggnaden är klar utlöses WAR-filen automatiskt med Ansible.
Jag håller detta enkelt och har inte konfigurerat Sonar eller Artifactory eller Junit under de kontinuerliga integrationsaktiviteterna som också kan göras.
Steg 1: Skapa ett Jenkins-jobb och konfigurera SCM-repo med hjälp av koden i GitHub
Steg 2: Konfigurera build
Steg 3: Skapa rollkatalog inom Jenkins-arbetsytan
Steg 4: Skapa rollen tomcat på Jenkins-arbetsytan med hjälp av kommandot som visas nedan
$ sudo ansible-galaxy init tomcat –offline
Följ proceduren som i föregående avsnitt för att skapa alla filer för uppgifter, vars, meta och huvudsidan.yml.
informatica intervju frågor och svar pdf
Den huvudsakliga site.yml filen skapas i / var / lib / Jenkins / arbetsyta / katalog.
Steg 5: Konfigurera Jenkins efterbyggnadssteg för att anropa Ansible-spelboken och ringa filen site.yml. Spara jobbet.
Steg 6: Utlös byggjobbet och starta Tomcat URL för att verifiera om applikationen distribueras korrekt.
Hantera AWS S3-objekt med Ansible
Ansible S3-modulen kan användas för att hämta eller lägga till en fil till eller från en S3-hink. För att använda den här modulen måste vi installera och konfigurera rösta modul av python som fungerar som ett API (applikationsprogramgränssnitt) för att komma åt AWS. Detta måste installeras på Ansible kontrollmaskin.
På Redhat Linux
$ sudo yum install -y python python-dev python-pip
På Ubuntu
$ apt-get install -y python python-dev python-pip
När ovanstående är klart installerar du boto
$ sudo pip install boto boto3
Om du inte kan installera måste du aktivera EPEL-repo. Förfarandet finns i del 1 i artikelserien i avsnittet om installation av ansible.
När ovanstående är gjort måste vi också tillhandahålla AWS-användaruppgifter. Du kan exportera miljövariablerna AWS Access och Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Om du, även efter att du har ställt in ovanstående miljövariabler, får ett fel eftersom referensen inte hittas, kan du också ange samma i spelboken.
Låt oss nu titta på några exempel på hur man använder Ansible med S3-hinkar och senare för att skapa och avsluta instanser.
Exempel 1:Skapa en tom hink med en mapp
--- - 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
Notera: Här skapas läget för att skapa skopor och tillstånd kan vara public-read eller public-read-write
Kör spelboken och visa den hink som skapats med utvecklingsmappen i den.
Exempel 2:För att kopiera (ladda upp) en fil till S3-hink
--- - 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
Här är objektet filen som skapas i skopan. Det kan vara en fil eller mapp. I det här fallet är det en fil. Källan är filen som hämtas från den lokala maskinen som är Ansible-styrmaskinen.
Notera:Här sätts läget för uppladdning av objekt
Kör spelboken och titta på S3-hinken.
Exempel 3:Hämta (ladda ner) filen från S3 bucket
--- - 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
Notera:Här är läget få för nedladdningsobjekt
Exempel 4:Ta bort ett objekt eller en fil från S3-hink
--- - 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
Notera:Här är läget delobj för radera objekt
Exempel 5:Ta bort en hink och allt innehåll
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Notera:Här raderas läget för raderingsskopan
Tillhandahålla en AWS EC2-instans med Ansible
Slutligen kommer jag att lämna dig med en av de viktigaste funktionerna i Ansible som är att skapa eller snurra upp en AWS EC2-instans och också hur man avslutar instansen. Glöm naturligtvis inte att installera rösta vilket är en förutsättning och säkerställer också att användaren “AWS_ACCESS_KEY_ID” och “AWS_SECRET_ACCESS_KEY” exporteras.
Om exporten inte fungerar ska du lägga till samma i koden som visas nedan.
appar som låter dig ladda ner youtube-videor
Koden nedan visar hur du skapar en EC2-instans tillsammans med att skapa en säkerhetsgrupp och ett nyckelpar.
- Skapa en säkerhetsgrupp
- Skapa nyckelpar och PEM-filen
- Skapa EC2-instans
- Spara IP2-instansens IP-adress i den synliga inventeringsfilen
Jag antar att användarna som gör den här övningen är väl insatta i AWS EC2-koncepten.
Lägg till koden nedan i en fil och kör samma för att verifiera skapandet av EC2-instans i AWS-konsolen. Eftersom koden är stor är den uppdelad på två sidor men se till att du sparar allt till en enda yml-fil.
--- - 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}}'
Kör spelboken
/ etc / ansible / hosts inventeringsfil uppdaterad med privat IP
Logga in på förekomsten
ssh -i “vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Notera:Klicka på bilden nedan för en förstorad vy)
Säkerhetsgrupp skapad
Nyckelpar skapats
Avsluta EC2-instanser
I det här avsnittet får vi veta mer om att avsluta EC2-instanser.
På följande skärm kan du se att det finns två instanser som körs och stegen för att avslutas skulle vara i följande ordning:
- Avsluta EC2-instanser med hjälp av instans-id: er
- Ta bort säkerhetsgruppen
- Ta bort nyckelpar
Playbook för att avsluta båda EC2-instanserna
--- - 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}}'
Sammanfattning
Idag tittar de flesta IT-organisationer på någon form av differentierare för att vinna affärer och visa upp samma för sina kunder. Jag skulle säga att automatisering definitivt är en av de viktigaste skillnaderna.
Med verktyg som Ansible anser jag att du borde kunna automatisera de flesta repetitiva manuella uppgifterna.
Således vad vi har lärt oss av detta 3-delars Ansible Tutorial-serie visar Ansible som ett mycket populärt och kraftfullt konfigurationshanteringsverktyg som hjälper inom olika automationsområden, allt från uppgiftsautomation, applikationsdistribution och molnadministration. Därmed talar vi främst om IT-orkestrering.
Hoppas att du gillade utbudet av Ansible-handledning och jag är säker på att du skulle ha fått enorm kunskap om konceptet nu.
Därefter lär vi oss hur man integrerar Jenkins med Selen som också är en del av vår DevOps-träningsserie.
PREV-handledning | NÄSTA självstudie
Rekommenderad läsning
- Ansible Tutorial: Installation och användning med Ansible Modules
- Kontinuerlig integration i DevOps
- Kontinuerlig leverans i DevOps
- Integrering av Jenkins med Selenium WebDriver: Steg-för-steg-handledning
- Vad är Integration Testing (Tutorial med Integration Testing Exempel)
- Integration av selen med JMeter
- Uppgiftsautomatisering med Ansible Playbooks och Ansible Valv med exempel
- Kontinuerlig distribution i DevOps