ansible roles integration with jenkins devops
Et dybtgående kig på Ansible Roller, Integration med Jenkins og Ansible S3 og EC2 moduler:
I del 2 af serie om Ansible tutorials , vi lærte, hvordan Ans1ible playbooks bruges til at udføre flere opgaver og få alle målmaskiner eller servere til en bestemt ønsket tilstand.
Anbefalet Læs => Eksponentiel DevOps-træningsserie
Ansible playbooks er primært YAML-filer, der indeholder flere opgaver i en enkelt enorm fil, som ikke er modulær og genanvendelig. Men hvis du har brug for at bryde hele din konfiguration og være mere modulær og genanvendelig, så vil Ansible-roller hjælpe meget.
I denne Ansible Tutorial , vi vil se på Ansible-roller, Integrere Ansible med Jenkins til kontinuerlig levering fra DevOps-synspunkt og vigtigst af alt se på Ansible S3- og EC2-moduler til styring af AWS EC2-forekomster (Opret og afslut EC2-forekomster).
Hvad du vil lære:
- Ansible roller
- Jenkins Integration med Ansible
- Administrer AWS S3-objekter med Ansible
- Sørg for en AWS EC2-forekomst ved hjælp af Ansible
- Afslutning af EC2-forekomster
- Resumé
- Anbefalet læsning
Ansible roller
Med Ansible roller kan du gruppere dine variabler, opgaver, håndterere osv., Hvilket øger genanvendelighed og helt sikkert reducerer syntaksfejl. Det hjælper med at fjerne hele koden.
Ansible roller ligner moduler i Marionet og kogebøger i Chef.
For at oprette roller bruger du ansible-galakse kommando, der har alle skabeloner til at oprette den.
Eksempel på scenarie
Jeg har været DevOps-specialist det meste af mit liv og har kun arbejdet i CI og CD.
Så for eksempel i kontinuerlig levering, hvor jeg implementerer en ny build af min J2EE-applikation (WAR-fil) til at tomkatte mine trin, ville være som følger:
- Stop applikationen
- Afinstaller applikationen
- Implementer den nye version af en applikation
- Start applikationen
Så jeg ville skabe en rolle med mindst 4 opgaver og en hovedfil, der kalder det. På denne måde gør jeg min kode mere modulær og genanvendelig. Så lad os kalde denne rolle som tomcat og opret det.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Når rollen er oprettet, kan du se katalogstrukturen, som den har oprettet.
Hovedkomponenterne, vi vil bruge i dette afsnit, inkluderer:
- opgaver / main.yml - Dette er udgangspunktet for opgaver, der er oprettet til rollen. Du kan bruge main.yml-filen til at pege på de andre opgavefiler.
- hvis - Dette er for at definere alle anvendte variabler.
- meta - Dette er for at definere oplysninger om dig selv eller forfatteren.
Trin 1: Opret hovedlisten over alle opgaver
Rediger opgaver / main.yml fil og tilføj nedenstående kode. I henhold til eksemplet ovenfor nævnt definerer vi 4 forskellige opgaver. I de fleste tilfælde starter implementeringsprogrammet også applikationen, så den sidste af startprogrammet muligvis ikke kræves.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Trin 2: Opret alle de 4 filer i henhold til scenariet
I nedenstående opgaver handling: ec2_facts bruges til at hente fakta fra eksterne EC2-forekomster og kalde dem i spil / opgaver
opgaver / 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
opgaver / afinstallere_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
opgaver / 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 implementeringskoden, hvis JENKINS bruges til at opbygge WAR-filen, skal du angive WAR-filens kildekatalog i kopi modulet og destinationen er målserverens webapps placering af tomcat.
opgave / 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
Trin 3: Definer variabler
Rediger vars / main.yml fil og tilføj koden som vist nedenfor.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Trin 4: Definer oplysninger i metamappen
Rediger meta / main.yml-filen, og tilføj dine oplysninger som forfatter, beskrivelse og firma.
c ++ spørgsmål til kodning af interview
galaxy_info: author: V Niranjan description: Devops specialist company:
Trin 5: Opret en hovedside.yml-fil
Til sidst skal du oprette den primære site.yml-fil for at kalde den oprettede rolle, som igen hjælper med at distribuere applikationen til serverne eller en liste over værter i henhold til lagerfilen. Opret filen som /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Trin 6: Kør playbook-fil site.yml
$ ansible-playbook site.yml
Start Tomcat URL for at se, om applikationen er blevet implementeret og startet.
HTTP: //: portno / manager
Jenkins Integration med Ansible
I dette afsnit vil vi se, hvordan Jenkins kan integreres med Ansible. WAR-filen, der er bygget ved hjælp af byggeprocessen, bruges til at implementere til Tomcat på målmaskinen ved hjælp af Ansible. Vi kalder Ansible-rollen oprettet i det foregående afsnit i Jenkins ved hjælp af Ansible-plugin'et.
Så når bygningen er færdig, vil implementeringen af WAR-filen automatisk blive udløst ved hjælp af Ansible.
Jeg holder dette simpelt og har ikke konfigureret Sonar eller Artifactory eller Junit under de kontinuerlige integrationsaktiviteter, som også kan gøres.
Trin 1: Opret et Jenkins-job, og konfigurer SCM-repoen ved hjælp af koden i GitHub
Trin 2: Konfigurer build
Trin 3: Opret rollebibliotek i Jenkins-arbejdsområdet
Trin 4: Opret tomcat-rollen på Jenkins-arbejdsområdeplaceringen ved hjælp af kommandoen vist nedenfor
$ sudo ansible-galaxy init tomcat – offline
Følg proceduren som i det foregående afsnit for at oprette alle filerne til opgaver, vars, meta og hovedsiden.yml.
bedste gratis fjernelse af malware til Windows 7
Det vigtigste site.yml fil oprettes i / var / lib / Jenkins / workspace / vejviser.
Trin 5: Konfigurer Jenkins post-build trin til at påkalde Ansible playbook og kalde filen site.yml. Gem jobbet.
Trin 6: Udløs buildjobbet, og start Tomcat URL for at kontrollere, om applikationen er implementeret korrekt.
Administrer AWS S3-objekter med Ansible
Ansible S3-modul kan bruges til at hente eller placere en fil til eller fra en S3-spand. For at bruge dette modul skal vi installere og konfigurere stemme modul af python, der fungerer som et API (Application program interface) for at få adgang til AWS. Dette skal installeres på Anvendelig kontrolmaskine.
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 ovenstående er gjort, skal du installere boto
$ sudo pip install boto boto3
Hvis du ikke kan installere det, skal du aktivere EPEL repo. Fremgangsmåden findes i del 1 i artikelserien i afsnittet om installation af ansible.
Når ovenstående er gjort, skal vi også give AWS-brugeroplysninger. Du kan eksportere miljøvariablerne AWS Access og Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Hvis du selv efter indstilling af ovenstående miljøvariabler får en fejl, da legitimationsoplysningerne ikke findes, kan du også angive det samme i playbook.
Lad os nu se på nogle eksempler på, hvordan man bruger Ansible med S3 spande og senere til at oprette og afslutte forekomster.
Eksempel 1:Opret en tom spand med en mappe
--- - 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
Bemærk: Her oprettes tilstanden til oprettelse af bucket, og Tilladelse kan være offentligt læst eller offentligt læst-skriv
Kør playbook og se bucket oprettet med udviklingsmappen i den.
Eksempel 2:For at kopiere (uploade) en fil til S3 bucket
--- - 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
Her er objektet den fil, der er oprettet i spanden. Det kan være en fil eller mappe. I dette tilfælde er det en fil. Kilden er den fil, der hentes fra den lokale maskine, som er Ansible-kontrolmaskinen.
Bemærk:Her er tilstanden sat til upload af objekt
Kør playbook og se på S3-skovlen.
Eksempel 3:Hent (download) filen fra 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
Bemærk:Her er tilstanden get for download-objekt
Eksempel 4:Slet et objekt eller en fil fra S3-spand
--- - 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
Bemærk:Her er tilstanden delobj for at slette objekt
Eksempel 5:Slet en spand og alt indhold
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Bemærk:Her slettes tilstanden for sletespanden
Sørg for en AWS EC2-forekomst ved hjælp af Ansible
Endelig vil jeg efterlade dig med en af de vigtigste funktioner i Ansible, som er at oprette eller spin op til en AWS EC2-forekomst og også hvordan man afslutter forekomsten. Glem selvfølgelig ikke at installere stemme hvilket er en forudsætning og også sørger for at eksportere brugeren “AWS_ACCESS_KEY_ID” og “AWS_SECRET_ACCESS_KEY”.
Hvis eksporten ikke fungerer, skal du sørge for at tilføje det samme i koden som vist nedenfor.
program til overvågning af cpu og gpu temp
Koden nedenfor viser dig, hvordan du opretter en EC2-forekomst sammen med oprettelse af en sikkerhedsgruppe og et nøglepar.
- Opret en sikkerhedsgruppe
- Opret nøglepar og PEM-filen
- Opret EC2-forekomst
- Gem EC2-instansens IP-adresse i den synlige beholdningsfil
Jeg antager, at brugerne, der udfører denne øvelse, er fortrolige med AWS EC2-koncepterne.
Føj nedenstående kode til en fil, og kør den samme for at verificere oprettelsen af EC2-forekomst i AWS-konsollen. Da koden er stor, er den opdelt i 2 sider, men sørg for at gemme alle i en enkelt 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 playbook
/ etc / ansible / hosts beholdningsfil opdateret med privat IP
Log ind på forekomsten
ssh -i “vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Bemærk:Klik på nedenstående billede for en forstørret visning)
Sikkerhedsgruppe oprettet
Nøglepar oprettet
Afslutning af EC2-forekomster
Lad os vide mere om afslutning af EC2-forekomster i dette afsnit.
I det følgende skærmbillede kan du se, at der er to forekomster, der kører, og trinene til afslutning vil være i følgende rækkefølge:
- Afslut EC2-forekomsterne ved hjælp af instans-id'er
- Fjern sikkerhedsgruppe
- Fjern nøglepar
Playbook for at afslutte begge EC2-forekomster
--- - 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}}'
Resumé
I dag ser de fleste IT-organisationer på en slags differentiatorer for at vinde forretning og fremvise det samme for deres kunder. Jeg vil sige, at automatisering bestemt er en af nøgledifferentiatorerne.
Med værktøjer som Ansible er jeg af den opfattelse, at du skal kunne automatisere de fleste af de gentagne manuelle opgaver.
Således hvad vi har lært af dette 3-delt Ansible Tutorial-serie fremviser Ansible som et meget populært og kraftfuldt konfigurationsstyringsværktøj, der hjælper inden for forskellige områder af automatisering lige fra opgaveautomatisering, applikationsinstallation og cloud-klargøring. Dermed taler vi primært om it-orkestrering.
Håber du nød udvalget af Ansible-tutorials, og jeg er sikker på, at du nu ville have fået enorm viden om konceptet.
Derefter lærer vi, hvordan man integrerer Jenkins med Selen, som også er en del af vores DevOps-træningsserie.
PREV-vejledning | NÆSTE vejledning
Anbefalet læsning
- Ansible Tutorial: Installation og brug med Ansible Modules
- Kontinuerlig integration i DevOps
- Kontinuerlig levering i DevOps
- Integration af Jenkins med Selen WebDriver: Trin-for-trin vejledning
- Hvad er integrationstest (tutorial med integrationstesteksempel)
- Integration af selen med JMeter
- Opgaveautomatisering ved hjælp af anvendelige playbøger og svarbare hvælvinger med eksempler
- Kontinuerlig implementering i DevOps