ansible roles integration with jenkins devops
En grundig titt på Ansible Rolles, Integration with Jenkins og Ansible S3 og EC2 moduler:
I del 2 av serie om Ansible tutorials , vi lærte hvordan Ans1ible-spillbøker brukes til å utføre flere oppgaver og få alle målmaskiner eller servere til en bestemt ønsket tilstand.
Anbefalt lese => Eksponentiell DevOps Training Series
Ansible spillbøker er primært YAML-filer som inneholder flere oppgaver i en enkelt stor fil som ikke er modulær og gjenbrukbar. Men hvis du trenger å bryte opp hele konfigurasjonen og være mer modulær og gjenbrukbar, vil Ansible-roller hjelpe mye.
I denne Ansible Tutorial , vil vi se på Ansible-roller, Integrere Ansible med Jenkins for kontinuerlig levering fra DevOps-synspunkt og viktigst av alt se på Ansible S3- og EC2-moduler for administrering av AWS EC2-forekomster (Opprett og avslutt EC2-forekomster).
Hva du vil lære:
- Ansible roller
- Jenkins Integration with Ansible
- Administrer AWS S3-objekter med Ansible
- Sørg for en AWS EC2-forekomst ved hjelp av Ansible
- Avslutter EC2-forekomster
- Sammendrag
- Anbefalt lesing
Ansible roller
Med Ansible-roller kan du gruppere variablene, oppgavene, håndtererne osv., Noe som øker gjenbrukbarhet og absolutt reduserer syntaksfeil. Det hjelper å rote hele koden.
Ansible roller ligner på moduler i Puppet og kokebøker i Chef.
For å opprette roller bruker du ansible-galaxy kommando som har alle malene for å opprette den.
Eksempel på scenario
Jeg har vært DevOps-spesialist det meste av livet mitt og har bare jobbet innen CI og CD.
Så for eksempel i kontinuerlig levering der jeg distribuerer en ny versjon av J2EE-applikasjonen min (WAR-fil) for å tomcat, vil trinnene mine være som følger:
- Stopp søknaden
- Avinstaller applikasjonen
- Distribuere den nye versjonen av en applikasjon
- Start applikasjonen
Så jeg skulle lage en rolle med minst fire oppgaver og en hovedfil som kalte den. På denne måten gjør jeg koden min mer modulær og gjenbrukbar. Så la oss kalle denne rollen som tomcat og lage den.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Når rollen er opprettet, kan du se katalogstrukturen den har opprettet.
Hovedkomponentene vi vil bruke i denne delen inkluderer:
- oppgaver / main.yml - Dette er utgangspunktet for oppgaver som er opprettet for rollen. Du kan bruke main.yml-filen til å peke på de andre oppgavefilene.
- hvem sin - Dette er for å definere eventuelle variabler som brukes.
- meta - Dette er for å definere informasjon om deg selv eller forfatteren.
Trinn 1: Lag hovedlisten over alle oppgaver
Rediger oppgaver / main.yml filen og legg til koden nedenfor. I henhold til eksemplet nevnt ovenfor definerer vi 4 forskjellige oppgaver. I de fleste tilfeller vil distribusjonsapplikasjonen også starte applikasjonen, slik at den siste i startprogrammet kanskje ikke er nødvendig.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Trinn 2: Opprett alle de 4 filene i henhold til scenariet
I oppgavene nedenfor handling: ec2_facts brukes til å hente fakta fra eksterne EC2-forekomster og kalle dem i skuespill / oppgaver
oppgaver / 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
oppgaver / 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
oppgaver / 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 distribusjonskoden, hvis JENKINS brukes til å bygge WAR-filen, må du oppgi kildekatalogen til WAR-filen i kopiere modulen og målet er målserveren webapps plassering av tomcat.
oppgave / 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
Trinn 3: Definer variabler
Rediger vars / main.yml filen og legg til koden som vist nedenfor.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Trinn 4: Definer informasjon i metamappen
Rediger meta / main.yml-filen og legg til informasjonen din som forfatter, beskrivelse og firma.
hvordan åpne bin filer i windows
galaxy_info: author: V Niranjan description: Devops specialist company:
Trinn 5: Opprett en hovedside.yml-fil
Til slutt oppretter du hovedfilen site.yml for å kalle den opprettet rollen, som igjen vil bidra til å distribuere applikasjonen til serverne eller en liste over verter i henhold til lagerfilen. Opprett filen som /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Trinn 6: Kjør playbook file site.yml
$ ansible-playbook site.yml
Start Tomcat URL for å se om applikasjonen er distribuert og startet.
HTTP: //: portno / manager
Jenkins Integration with Ansible
I denne delen vil vi se hvordan Jenkins kan integreres med Ansible. WAR-filen som ble bygget ved hjelp av byggeprosessen, vil bli brukt til å distribueres til Tomcat på målmaskinen ved hjelp av Ansible. Vi vil kalle Ansible-rollen som ble opprettet i forrige seksjon i Jenkins ved hjelp av Ansible-plugin.
Så når bygningen er ferdig, blir distribusjonen av WAR-filen automatisk utløst ved hjelp av Ansible.
Jeg holder dette enkelt og har ikke konfigurert Sonar eller Artifactory eller Junit under kontinuerlige integrasjonsaktiviteter som også kan gjøres.
Trinn 1: Opprett en Jenkins-jobb og konfigurer SCM-repoen ved hjelp av koden i GitHub
Trinn 2: Konfigurer build
Trinn 3: Opprett rollekatalog i Jenkins-arbeidsområdet
Trinn 4: Opprett tomcat-rollen på Jenkins-arbeidsområdet ved å bruke kommandoen vist nedenfor
$ sudo ansible-galaxy init tomcat –offline
Følg fremgangsmåten som i forrige avsnitt for å lage alle filene for oppgaver, vars, meta og hovedsiden.yml.
beste programmene for å gjenopprette slettede filer
Hoved site.yml filen er opprettet i / var / lib / Jenkins / arbeidsområde / katalog.
Trinn 5: Konfigurer Jenkins-posttrinnet for å påkalle Ansible-spillboken og ring til site.yml-filen. Lagre jobben.
Trinn 6: Utløs byggejobben og start Tomcat URL for å verifisere om applikasjonen er distribuert riktig.
Administrer AWS S3-objekter med Ansible
Ansible S3-modul kan brukes til å hente eller legge en fil til eller fra en S3-bøtte. For å bruke denne modulen må vi installere og konfigurere stemme modul av python som fungerer som et API (Application program interface) for å få tilgang til AWS. Dette må installeres på Ansikts 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 ovenstående er gjort, installer du boto
$ sudo pip install boto boto3
Hvis du ikke kan installere, må du aktivere EPEL repo. Fremgangsmåten finner du i del 1 av artikkelserien i avsnittet om installering av ansible.
Når det ovennevnte er gjort, må vi også gi AWS brukerlegitimasjon. Du kan eksportere miljøvariablene AWS Access og Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Hvis du selv etter å ha angitt ovennevnte miljøvariabler får en feil fordi legitimasjonen ikke blir funnet, kan du også spesifisere det samme i spillboken.
La oss nå se på noen eksempler på hvordan du bruker Ansible med S3-skuffer og senere for å opprette og avslutte forekomster.
Eksempel 1:Lag en tom bøtte 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
Merk: Her er modusen opprettet for å lage bøtte, og Tillatelse kan være offentlig-lest eller offentlig-lese-skrive
Kjør lekeboken og se bøtta som er opprettet med utviklingsmappen i den.
Eksempel 2:For å kopiere (laste opp) 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 filen som er opprettet i bøtta. Det kan være en fil eller mappe. I dette tilfellet er det en fil. Kilden er filen som hentes fra den lokale maskinen som er Ansible-kontrollmaskinen.
Merk:Her settes modusen for å laste opp objekt
Kjør lekeboken og se på S3-bøtta.
Eksempel 3:Få (last ned) 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
Merk:Her er modusen få for nedlastingsobjekt
Eksempel 4:Slett et objekt eller en fil fra S3-bøtte
--- - 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
Merk:Her er modusen delobj for å slette objektet
Eksempel 5:Slett en bøtte og alt innholdet
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Merk:Her er modusen delete for delete bucket
Sørg for en AWS EC2-forekomst ved hjelp av Ansible
Til slutt vil jeg gi deg en av de viktigste funksjonene i Ansible, som er å opprette eller spinne opp en AWS EC2-forekomst og også hvordan du avslutter forekomsten. Selvfølgelig, ikke glem å installere stemme som er en forutsetning og sørger også for å eksportere brukeren “AWS_ACCESS_KEY_ID” og “AWS_SECRET_ACCESS_KEY”.
Hvis eksporten ikke fungerer, må du legge til det samme i koden som vist nedenfor.
beste virtuelle maskinprogramvaren for Windows
Koden nedenfor viser deg hvordan du oppretter en EC2-forekomst sammen med å opprette en sikkerhetsgruppe og nøkkelpar.
- Opprett en sikkerhetsgruppe
- Opprett nøkkelpar og PEM-filen
- Opprett EC2-forekomst
- Lagre EC2-forekomstens IP-adresse i den synlige beholdningsfilen
Jeg antar at brukerne som gjør denne øvelsen, er godt kjent med AWS EC2-konseptene.
Legg til koden nedenfor i en fil og kjør den samme for å bekrefte opprettelsen av EC2-forekomst i AWS-konsollen. Siden koden er stor, er den delt inn i to sider, men sørg for at du lagrer alt 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}}'
Kjør lekeboken
/ etc / ansible / verts inventarfil oppdatert med privat IP
Logg inn på forekomsten
ssh -i “vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Merk:Klikk på bildet nedenfor for en forstørret visning)
Sikkerhetsgruppe opprettet
Nøkkelpar opprettet
Avslutter EC2-forekomster
I denne delen kan vi få vite mer om avslutning av EC2-forekomster.
I det følgende skjermbildet kan du se at det er to tilfeller som kjører, og trinnene for avslutning vil være i følgende rekkefølge:
- Avslutt EC2-forekomster ved hjelp av Instance ID
- Fjern sikkerhetsgruppen
- Fjern nøkkelpar
Playbook for å avslutte 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}}'
Sammendrag
I dag ser de fleste IT-organisasjonene på en slags differensierere for å vinne forretninger og vise frem det samme for sine kunder. Jeg vil si at automatisering definitivt er en av nøkkeldifferentiatorene.
Med verktøy som Ansible er jeg av den oppfatning at du skal kunne automatisere de fleste av de gjentatte manuelle oppgavene.
Dermed det vi har lært av dette 3-delt Ansible Tutorial-serie viser Ansible som et veldig populært og kraftig verktøy for konfigurasjonsadministrasjon som hjelper på forskjellige områder av automatisering, alt fra oppgaveautomatisering, applikasjonsdistribusjon og klargjøring av skyer. Dermed snakker vi først og fremst om IT-orkestrering.
Håper du likte utvalget av Ansible-veiledninger, og jeg er sikker på at du nå hadde fått enorm kunnskap om konseptet.
Deretter vil vi lære hvordan vi kan integrere Jenkins med Selen, som også er en del av DevOps-treningsserien vår.
PREV Opplæring | NESTE veiledning
Anbefalt lesing
- Ansible Tutorial: Installasjon og bruk med Ansible Modules
- Kontinuerlig integrasjon i DevOps
- Kontinuerlig levering i DevOps
- Integrasjon av Jenkins med Selenium WebDriver: trinnvis veiledning
- Hva er integrasjonstesting (opplæring med eksempel på integrasjonstesting)
- Integrering av selen med JMeter
- Oppgaveautomatisering ved hjelp av Ansible Playbooks og Ansible Vaults med eksempler
- Kontinuerlig distribusjon i DevOps