ansible roles integration with jenkins devops
Una mirada en profunditat sobre els rols Ansible, la integració amb Jenkins i els mòduls Ansible S3 i EC2:
A la part 2 del sèrie sobre tutorials Ansible , hem après com s'utilitzen els llibres de reproducció Ans1ible per executar diverses tasques i aconseguir que totes les màquines o servidors de destinació arribin a l'estat desitjat en particular.
Lectura recomanada => Sèrie d’entrenament DevOps exponencial
Els llibres de reproducció Ansible són principalment fitxers YAML que contenen diverses tasques en un únic fitxer enorme que no és modular i no es pot reutilitzar. Però si heu de trencar tota la configuració i ser més modulars i reutilitzables, els rols Ansible us ajudaran molt.
En aquest tutorial Ansible , analitzarem els rols Ansible, integrarem Ansible amb Jenkins per a la distribució contínua des del punt de vista de DevOps i, sobretot, els mòduls Ansible S3 i EC2 per gestionar instàncies AWS EC2 (crear i finalitzar instàncies EC2).
Què aprendreu:
- Rols Ansible
- Integració de Jenkins amb Ansible
- Gestioneu objectes AWS S3 amb Ansible
- Subministreu una instància AWS EC2 mitjançant Ansible
- Finalització d’instàncies EC2
- Resum
- Lectura recomanada
Rols Ansible
Amb els rols Ansible podeu agrupar les vostres variables, tasques, gestors, etc., que augmenten la reutilització i segurament redueixen els errors de sintaxi. Ajuda a desordenar tot el codi.
Els rols assenyalables són similars als mòduls de Puppet i als llibres de cuina del xef.
Per crear rols, utilitzeu el fitxer ansible-galaxy que té totes les plantilles per crear-la.
Exemple d'escenari
He estat especialista en DevOps la major part de la meva vida i he estat treballant només a CI i CD.
Així, per exemple, en lliurament continu, on estic desplegant una nova compilació de la meva aplicació J2EE (fitxer WAR) per fer servir els meus passos, seria el següent:
- Atureu l'aplicació
- Desinstal·leu l'aplicació
- Desplegueu la nova versió d'una aplicació
- Inicieu l'aplicació
Per tant, estaria creant un rol amb almenys 4 tasques i un fitxer principal que l'anomenés. D'aquesta manera, faré que el meu codi sigui més modular i reutilitzable. Per tant, anomenem aquest paper com a tomcat i crear-lo.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Un cop creat el rol, podeu veure l'estructura de directoris que ha creat.
Els components principals que utilitzarem en aquesta secció són:
- tasques / main.yml - Aquest és el punt de partida de les tasques creades per al paper. Podeu utilitzar el fitxer main.yml per assenyalar els altres fitxers de tasques.
- de qui - Es tracta de definir les variables utilitzades.
- meta - Es tracta de definir informació sobre vosaltres mateixos o l’autor.
Pas 1: creeu la llista principal de totes les tasques
Editeu el fitxer tasques / main.yml i afegiu el codi següent. Segons l’escenari d’exemple esmentat anteriorment, estem definint 4 tasques diferents. En la majoria dels casos, l'aplicació de desplegament també iniciarà l'aplicació, de manera que és possible que no sigui necessària la darrera de l'aplicació inicial.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Pas 2: creeu els 4 fitxers segons l'escenari
A les tasques següents acció: ec2_facts s'utilitza per obtenir fets d'instàncies EC2 remotes i trucar-los en reproduccions / tasques
fitxer tasques / 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
tasks / 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
tasks / 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
Al codi de desplegament, si s'utilitza JENKINS per construir el fitxer WAR, haureu de proporcionar el directori d'origen del fitxer WAR a còpia el mòdul i la destinació és la ubicació de les aplicacions web del servidor de destinació del 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 - -q
Pas 3: definiu les variables
Editeu el fitxer vars / main.yml i afegiu el codi tal com es mostra a continuació.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Pas 4: definiu la informació a la meta carpeta
Editeu el fitxer meta / main.yml i afegiu la vostra informació com l'autor, la descripció i l'empresa.
quina és la meva clau de seguretat wifi
galaxy_info: author: V Niranjan description: Devops specialist company:
Pas 5: creeu un fitxer site.yml principal
Per últim, creeu el fitxer site.yml principal per trucar al rol creat, que al seu torn us ajudarà a desplegar l’aplicació als servidors o a una llista d’amfitrions segons el fitxer d’inventari. Creeu el fitxer com /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Pas 6: executeu el fitxer de playbook site.yml
$ ansible-playbook site.yml
Inicieu l'URL Tomcat per veure si l'aplicació s'ha desplegat i s'ha iniciat.
HTTP: //: portno / manager
Integració de Jenkins amb Ansible
En aquesta secció, veurem com Jenkins es pot integrar amb Ansible. El fitxer WAR construït mitjançant el procés de compilació s'utilitzarà per desplegar-se a Tomcat a la màquina de destinació mitjançant Ansible. Anomenarem el rol Ansible creat a la secció anterior a Jenkins mitjançant el connector Ansible.
Així, un cop feta la compilació, el desplegament del fitxer WAR s'activarà automàticament mitjançant Ansible.
Ho mantinc tan senzill i no he configurat Sonar ni Artifactory ni Junit durant les activitats d'integració contínua que també es poden fer.
Pas 1: creeu un treball de Jenkins i configureu el repositori SCM mitjançant el codi de GitHub
Pas 2: configureu la compilació
Pas 3: creeu un directori de rols a l'espai de treball Jenkins
Pas 4: creeu el rol de tomcat a la ubicació de l'espai de treball Jenkins mitjançant l'ordre que es mostra a continuació
$ sudo ansible-galaxy init tomcat –offline
Seguiu el procediment de la secció anterior per crear tots els fitxers de tasques, vars, meta i el lloc principal.yml.
mostra de casos de prova per a aplicacions web
El principal site.yml el fitxer es crea a / var / lib / Jenkins / workspace / directori.
Pas 5: configureu el pas posterior a la construcció de Jenkins per invocar el llibre de joc Ansible i trucar al fitxer site.yml. Deseu la feina.
Pas 6: activeu la tasca de construcció i inicieu l'URL Tomcat per verificar si l'aplicació es desplega correctament.
Gestioneu objectes AWS S3 amb Ansible
El mòdul Ansible S3 es pot utilitzar per obtenir o posar un fitxer a o des d'un dipòsit S3. Per utilitzar aquest mòdul haurem d’instal·lar i configurar votar mòdul de python que actua com a API (interfície del programa d'aplicacions) per accedir a AWS. Això s'ha d'instal·lar al fitxer Màquina de control Ansible.
A Redhat Linux
$ sudo yum install -y python python-dev python-pip
A Ubuntu
$ apt-get install -y python python-dev python-pip
Un cop fet això, instal·leu boto
$ sudo pip install boto boto3
Si no podeu instal·lar-lo, haureu d'activar EPO repo. El procediment es pot trobar a la part 1 de la sèrie d'articles a la secció d'instal·lació ansible.
Un cop fet això, també hem de proporcionar les credencials d'usuari d'AWS. Podeu exportar les variables d'entorn d'AWS Access i de la clau secreta
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Si en cas que, fins i tot després d’establir les variables d’entorn anteriors, obtingueu un error ja que no es troben les credencials, també podeu especificar-les al llibre de reproducció.
Vegem ara alguns exemples de com utilitzar Ansible amb compartiments S3 i més endavant per crear i finalitzar instàncies.
Exemple 1:Creeu un dipòsit buit amb una carpeta
--- - 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
Nota: Aquí es crea el mode per crear un dipòsit i el permís es pot llegir públicament o llegir-escriure públicament
Executeu el llibre de reproducció i visualitzeu el dipòsit creat amb la carpeta de desenvolupament que hi ha.
Exemple 2:Per copiar (carregar) un fitxer al dipòsit 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
Aquí l'objecte és el fitxer creat dins del dipòsit. Pot ser un fitxer o una carpeta. En aquest cas, es tracta d’un fitxer. La font és el fitxer que es recull de la màquina local que és la màquina de control Ansible.
Nota:Aquí es posa el mode per carregar objectes
Executeu el llibre de reproducció i mireu el dipòsit S3.
Exemple 3:Obteniu (descarregueu) el fitxer del dipòsit 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
Nota:Aquí el mode és obtenir l'objecte de descàrrega
Exemple 4:Suprimiu un objecte o fitxer del dipòsit 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
Nota:Aquí el mode és delobj per a l'objecte de supressió
Exemple 5:Suprimiu un dipòsit i tot el contingut
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Nota:Aquí es suprimeix el mode del dipòsit de supressió
Subministreu una instància AWS EC2 mitjançant Ansible
Per últim, us deixaré una de les funcions més importants d'Ansible, que és crear o generar una instància AWS EC2 i també com finalitzar la instància. Per descomptat, no oblideu instal·lar-lo votar que és un requisit previ i que també garanteix l'exportació de l'usuari 'AWS_ACCESS_KEY_ID' i 'AWS_SECRET_ACCESS_KEY'.
En cas que l'exportació no funcioni, assegureu-vos d'afegir el mateix al codi que es mostra a continuació.
preguntes i respostes d’entrevistes d’angularjs per a usuaris experimentats a .net
El codi següent us mostrarà com crear una instància EC2 juntament amb la creació d'un grup de seguretat i un parell de claus.
- Creeu un grup de seguretat
- Creeu un parell de claus i el fitxer PEM
- Creeu una instància EC2
- Deseu l'adreça IP de la instància EC2 al fitxer d'inventari responsable
Suposo que els usuaris que fan aquest exercici coneixen bé els conceptes AWS EC2.
Afegiu el codi següent a un fitxer i executeu el mateix per verificar la creació de la instància EC2 a la consola AWS. Com que el codi és gran, es divideix en 2 pàgines, però assegureu-vos de desar-ho tot en un sol fitxer 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}}'
Executeu el llibre de reproducció
El fitxer d'inventari / etc / ansible / hosts s'ha actualitzat amb IP privada
Inicieu la sessió a la instància
ssh -i “vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Nota:Feu clic a la imatge següent per obtenir una vista ampliada)
S'ha creat el grup de seguretat
S'ha creat el parell de claus
Finalització d’instàncies EC2
En aquesta secció informem-nos més sobre la finalització d’instàncies EC2.
A la pantalla següent podeu veure que hi ha 2 instàncies en execució i els passos per finalitzar serien en l'ordre següent:
- Finalitzeu les instàncies EC2 mitjançant els identificadors d’instància
- Elimina el grup de seguretat
- Elimina el parell de claus
Playbook per finalitzar ambdues instàncies 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}}'
Resum
Avui en dia, la majoria de les organitzacions de TI busquen algun tipus de diferencial per guanyar negocis i mostrar-los als seus clients. Jo diria que l’automatització és sens dubte un dels diferencials clau.
Amb eines com Ansible, opino que hauríeu de poder automatitzar la majoria de tasques manuals repetitives.
Per tant, el que hem après d'això Sèrie de tutors Ansible en 3 parts presenta Ansible com a eina de gestió de configuracions molt popular i potent que ajuda en diferents àrees d’automatització que van des de l’automatització de tasques, el desplegament d’aplicacions i el subministrament al núvol. D’aquesta manera, principalment parlem d’orquestració de TI.
Espero que us hagi agradat la gamma de tutorials Ansible i estic segur que ja hauríeu adquirit un coneixement immens sobre el concepte.
A continuació, aprendrem a integrar Jenkins amb Selenium, que també forma part de la nostra sèrie de formació DevOps.
Lectura recomanada
- Tutorial Ansible: Instal·lació i ús amb mòduls Ansible
- Integració contínua en DevOps
- Lliurament continu en DevOps
- Integració de Jenkins amb Selenium WebDriver: tutorial pas a pas
- Què és la prova d'integració (Tutorial amb exemple de prova d'integració)
- Integració de seleni amb JMeter
- Automatització de tasques que fan servir Ansible Playbooks i Ansible Vaults amb exemples
- Desplegament continu a DevOps