ansible roles integration with jenkins devops
O privire aprofundată asupra rolurilor Ansible, integrării cu Jenkins și modulelor Ansible S3 și EC2:
În partea 2 din serie despre tutoriale Ansible , am aflat cum sunt folosite playlist-urile Ans1ible pentru a executa mai multe sarcini și pentru a obține toate mașinile sau serverele țintă într-o anumită stare dorită.
Citiți recomandat => Seria de antrenament exponențială DevOps
Cărțile de redare Ansible sunt în principal fișiere YAML care conțin mai multe sarcini într-un singur fișier imens, care nu este modular și reutilizabil. Dar dacă aveți nevoie să vă rupeți întreaga configurație și să fiți mai modulari și reutilizabili, atunci rolurile Ansible vă vor ajuta foarte mult.
În acest tutorial Ansible , vom analiza rolurile Ansible, vom integra Ansible cu Jenkins pentru livrare continuă din punct de vedere DevOps și, cel mai important, vom analiza modulele Ansible S3 și EC2 pentru gestionarea instanțelor AWS EC2 (Crearea și terminarea instanțelor EC2).
Ce veți învăța:
- Roluri Ansible
- Integrarea Jenkins cu Ansible
- Gestionați obiecte AWS S3 cu Ansible
- Furnizați o instanță AWS EC2 utilizând Ansible
- Încheierea instanțelor EC2
- rezumat
- Lectură recomandată
Roluri Ansible
Cu rolurile Ansible puteți grupa variabilele, sarcinile, gestionarele etc., care măresc reutilizarea și cu siguranță reduc erorile de sintaxă. Ajută la dezordine întregul cod.
Rolurile acceptabile sunt similare cu modulele din Puppet și cărțile de bucate din Chef.
Pentru a crea roluri, utilizați ansible-galaxy comandă care are toate șabloanele pentru ao crea.
Exemplu de scenariu
Am fost specialist DevOps pentru cea mai mare parte a vieții mele și am lucrat doar în CI și CD.
Deci, de exemplu, în livrare continuă, în care implementez o nouă versiune a aplicației mele J2EE (fișierul WAR) pentru a-mi realiza pașii, ar fi după cum urmează:
- Opriți aplicația
- Dezinstalați aplicația
- Implementați noua versiune a unei aplicații
- Porniți aplicația
Așadar, aș crea un rol cu cel puțin 4 sarcini și un singur fișier principal care îl numește. În acest fel îmi fac codul mai modular și reutilizabil. Deci, să numim acest rol ca motan și creați-l.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline 
Odată ce rolul este creat, puteți vedea structura de directoare pe care a creat-o.
Principalele componente pe care le vom folosi în această secțiune includ:
- task-uri / main.yml - Acesta este punctul de plecare pentru sarcinile create pentru rol. Puteți utiliza fișierul main.yml pentru a indica celelalte fișiere de activitate.
- a caror - Aceasta este pentru a defini orice variabilă utilizată.
- meta - Aceasta este pentru a defini informații despre dvs. sau despre autor.
Pasul 1: Creați lista principală a tuturor activităților
Editați fișierul task-uri / main.yml fișier și adăugați codul de mai jos. Conform exemplului de scenariu menționat mai sus, definim 4 sarcini diferite. În majoritatea cazurilor, aplicația de implementare va porni aplicația, astfel încât ultima aplicație de pornire să nu fie necesară.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml Pasul 2: Creați toate cele 4 fișiere conform scenariului
În sarcinile de mai jos acțiune: ec2_facts este folosit pentru a obține fapte de la instanțe EC2 la distanță și pentru a le apela în redări / sarcini
task / fișier 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 - -qtasks / 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 - -qtasks / 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În codul de implementare, dacă JENKINS este utilizat pentru a construi fișierul WAR, atunci trebuie să furnizați directorul sursă al fișierului WAR în copie modul și destinația este locația serverului țintă webapps a tomcat.
task / 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 - -qPasul 3: definiți variabilele
Editați fișierul vars / main.yml fișier și adăugați codul așa cum se arată mai jos.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcatPasul 4: definiți informațiile în meta folder
Editați fișierul meta / main.yml și adăugați informațiile dvs., cum ar fi autorul, descrierea și compania.
aplicație care vă permite să spionați un alt telefon
galaxy_info: author: V Niranjan description: Devops specialist company: Pasul 5: Creați un fișier principal site.yml
În cele din urmă, creați fișierul principal site.yml pentru a apela rolul creat, care la rândul său va ajuta la implementarea aplicației pe servere sau o listă de gazde conform fișierului de inventar. Creați fișierul ca /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apachePasul 6: Rulați fișierul playbook site.yml
$ ansible-playbook site.yml

Lansați adresa URL Tomcat pentru a vedea dacă aplicația a fost implementată și pornită.
HTTP: //: portno / manager

Integrarea Jenkins cu Ansible
În această secțiune, vom vedea cum Jenkins poate fi integrat cu Ansible. Fișierul WAR construit utilizând procesul de compilare va fi utilizat pentru a fi implementat pe Tomcat pe mașina țintă folosind Ansible. Vom apela rolul Ansible creat în secțiunea anterioară din Jenkins folosind pluginul Ansible.
Deci, odată ce construirea este finalizată, implementarea fișierului WAR va fi declanșată automat folosind Ansible.
Păstrez acest lucru simplu și nu am configurat Sonar, Artifactory sau Junit în timpul activităților de integrare continuă, care pot fi, de asemenea, realizate.
Pasul 1: Creați o lucrare Jenkins și configurați repo SCM utilizând codul din GitHub

Pasul 2: configurați versiunea

Pasul 3: Creați un director de roluri în spațiul de lucru Jenkins

Pasul 4: Creați rolul tomcat în locația spațiului de lucru Jenkins folosind comanda prezentată mai jos
$ sudo ansible-galaxy init tomcat – offline

Urmați procedura ca în secțiunea anterioară pentru a crea toate fișierele pentru sarcini, vars, meta și site-ul principal.yml.
ce este un fișier .jnlp
Principalul site.yml fișierul este creat în / var / lib / Jenkins / workspace / director.
Pasul 5: Configurați pasul post-construire Jenkins pentru a invoca manualul Ansible și apelați fișierul site.yml. Salvați slujba.

Pasul 6: declanșați lucrarea de construire și lansați adresa URL Tomcat pentru a verifica dacă aplicația este implementată corect.

Gestionați obiecte AWS S3 cu Ansible
Modulul Ansible S3 poate fi utilizat pentru a obține sau a pune un fișier către sau de la o bucket S3. Pentru a utiliza acest modul va trebui să instalăm și să configurăm vot modul de python care acționează ca API (interfața programului de aplicație) pentru a accesa AWS. Acest lucru trebuie instalat pe Mașină de control Ansible.
Pe Redhat Linux
$ sudo yum install -y python python-dev python-pipPe Ubuntu
$ apt-get install -y python python-dev python-pipOdată ce cele de mai sus sunt terminate, instalați boto
$ sudo pip install boto boto3Dacă nu puteți instala, va trebui să activați EPEL repo. Procedura poate fi găsită în partea 1 a seriei de articole din secțiunea de instalare ansible.
Odată ce cele de mai sus sunt făcute, trebuie să furnizăm și acreditări de utilizator AWS. Puteți exporta variabilele de mediu AWS Access și Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'Dacă, chiar și după setarea variabilelor de mediu de mai sus, veți primi o eroare, deoarece acreditările nu au fost găsite, atunci puteți specifica aceleași în playbook.
Să vedem acum câteva exemple despre cum să utilizați Ansible cu cupe S3 și mai târziu pentru a crea și a termina instanțe.
Exemplul 1:Creați o găleată goală cu un folder
--- - 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-1Notă: Aici este creat modul pentru crearea cupei și permisiunea poate fi citită în public sau citită în public
Rulați playbook-ul și vizualizați cupa creată cu folderul de dezvoltare din interior.


Exemplul 2:Pentru a copia (încărca) un fișier în cupa 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 Aici obiectul este fișierul creat în cupă. Poate fi un fișier sau un folder. În acest caz, este un fișier. Sursa este fișierul care este preluat de pe mașina locală care este mașina de control Ansible.
Notă:Aici modul este pus pentru încărcarea obiectului
Rulați playbook-ul și uitați-vă la cupa S3.

Exemplul 3:Obțineți (descărcați) fișierul din bucket-ul 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 Notă:Aici modul este get pentru obiectul de descărcare
Exemplul 4:Ștergeți un obiect sau un fișier din cupa 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 Notă:Aici modul este delobj pentru obiectul de ștergere
Exemplul 5:Ștergeți o găleată și tot conținutul
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete Notă:Aici modul este șters pentru cupa de ștergere
Furnizați o instanță AWS EC2 utilizând Ansible
În cele din urmă, vă voi lăsa una dintre cele mai importante caracteristici ale Ansible, care este crearea sau rotirea unei instanțe AWS EC2 și, de asemenea, modul de terminare a instanței. Desigur, nu uitați să instalați vot care este o condiție prealabilă și, de asemenea, asigură exportul utilizatorului „AWS_ACCESS_KEY_ID” și „AWS_SECRET_ACCESS_KEY”.
În cazul în care exportul nu funcționează, asigurați-vă că adăugați același lucru în cod așa cum se arată mai jos.
care este faza de analiză în sdlc
Codul de mai jos vă va arăta cum să creați o instanță EC2 împreună cu crearea unui grup de securitate și a unei perechi de chei.
- Creați un grup de securitate
- Creați perechea de chei și fișierul PEM
- Creați o instanță EC2
- Salvați adresa IP a instanței EC2 în fișierul de inventar
Presupun că utilizatorii care fac acest exercițiu sunt bine familiarizați cu conceptele AWS EC2.
Adăugați codul de mai jos într-un fișier și rulați același lucru pentru a verifica crearea instanței EC2 în consola AWS. Deoarece codul este mare, acesta este împărțit în 2 pagini, dar asigurați-vă că le salvați într-un singur fișier 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}}'Rulați manualul de redare

/ etc / ansible / hosts fișier de inventar actualizat cu IP privat

Conectați-vă la instanță
ssh -i „vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Notă:Faceți clic pe imaginea de mai jos pentru o vizualizare mărită)

Grup de securitate creat

Perechea de chei a fost creată

Încheierea instanțelor EC2
În această secțiune, să aflăm mai multe despre încheierea instanțelor EC2.
În următorul ecran puteți vedea că există 2 instanțe care rulează și pașii pentru terminare ar fi în următoarea ordine:
- Terminați instanțele EC2 folosind ID-uri de instanță
- Eliminați grupul de securitate
- Eliminați perechea de chei

Playbook pentru a încheia ambele instanțe 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}}'rezumat
Astăzi, majoritatea organizațiilor IT se uită la un fel de diferențiere pentru a câștiga afaceri și a le prezenta clienților lor. Aș spune că automatizarea este cu siguranță unul dintre diferențiatorii cheie.
Cu instrumente precum Ansible, sunt de părere că ar trebui să puteți automatiza majoritatea sarcinilor manuale repetitive.
Astfel ceea ce am învățat din aceasta Seria Tutorial Ansible în 3 părți prezintă Ansible ca un instrument de gestionare a configurațiilor foarte popular și puternic, care ajută în diferite domenii de automatizare, de la automatizarea sarcinilor, implementarea aplicațiilor și aprovizionarea în cloud. Prin urmare, vorbim în primul rând despre orchestrarea IT.
Sper că ți-a plăcut gama de tutoriale Ansible și sunt sigur că ai fi câștigat cunoștințe imense despre concept până acum.
Apoi, vom învăța cum să integrăm Jenkins cu Selenium, care face parte, de asemenea, din seria noastră de formare DevOps.
Lectură recomandată
- Tutorial Ansible: Instalare și utilizare cu module Ansible
- Integrare continuă în DevOps
- Livrare continuă în DevOps
- Integrarea Jenkins cu Selenium WebDriver: Tutorial pas cu pas
- Ce este testarea integrării (Tutorial cu exemplu de testare a integrării)
- Integrarea seleniului cu JMeter
- Automatizarea sarcinilor Utilizarea manualelor de joc Ansible și a seifurilor Ansible cu exemple
- Implementare continuă în DevOps