ansible roles integration with jenkins devops
Uno sguardo approfondito a ruoli Ansible, integrazione con Jenkins e moduli Ansible S3 ed EC2:
Nella parte 2 del serie sui tutorial Ansible , abbiamo imparato come vengono utilizzati i playbook Ans1ible per eseguire più attività e portare tutte le macchine oi server di destinazione in un particolare stato desiderato.
Lettura consigliata => Esponenziale DevOps Training Series
I playbook Ansible sono principalmente file YAML che contengono più attività in un unico file enorme che non è modulare e riutilizzabile. Ma se hai bisogno di suddividere l'intera configurazione ed essere più modulare e riutilizzabile, i ruoli Ansible ti aiuteranno molto.
In questo tutorial Ansible , esamineremo i ruoli Ansible, l'integrazione di Ansible con Jenkins per la distribuzione continua dal punto di vista DevOps e, soprattutto, i moduli Ansible S3 ed EC2 per la gestione delle istanze di AWS EC2 (creazione e terminazione delle istanze EC2).
Cosa imparerai:
- Ruoli Ansible
- Integrazione di Jenkins con Ansible
- Gestisci oggetti AWS S3 con Ansible
- Fornisci un'istanza AWS EC2 utilizzando Ansible
- Interruzione delle istanze EC2
- Sommario
- Lettura consigliata
Ruoli Ansible
Con i ruoli Ansible puoi raggruppare le tue variabili, attività, gestori, ecc., Che aumentano la riusabilità e sicuramente riducono gli errori di sintassi. Aiuta a riordinare l'intero codice.
I ruoli di Ansible sono simili ai moduli in Puppet e ai libri di cucina in Chef.
Per creare ruoli, usi il file ansible-galaxy comando che ha tutti i modelli per crearlo.
Scenario di esempio
Sono stato uno specialista DevOps per la maggior parte della mia vita e ho lavorato solo in CI e CD.
Quindi, ad esempio in Continuous Delivery, dove sto distribuendo una nuova build della mia applicazione J2EE (file WAR) per tomcat, i miei passaggi sarebbero i seguenti:
- Ferma l'applicazione
- Disinstalla l'applicazione
- Distribuisci la nuova build di un'applicazione
- Avvia l'applicazione
Quindi creerei un ruolo con almeno 4 attività e un file principale che lo chiama. In questo modo sto rendendo il mio codice più modulare e riutilizzabile. Quindi chiamiamo questo ruolo come gatto e crearlo.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Una volta creato il ruolo, puoi vedere la struttura della directory che ha creato.
I componenti principali che utilizzeremo in questa sezione includono:
- task / main.yml - Questo è il punto di partenza per le attività create per il ruolo. Puoi usare il file main.yml per puntare agli altri file di attività.
- di chi - Questo serve per definire le variabili utilizzate.
- meta - Questo serve per definire le informazioni su di te o sull'autore.
Passaggio 1: crea l'elenco principale di tutte le attività
Modifica il file task / main.yml file e aggiungi il codice seguente. Secondo lo scenario di esempio menzionato sopra, stiamo definendo 4 diversi compiti. Nella maggior parte dei casi, l'applicazione di distribuzione avvierà anche l'applicazione, quindi l'ultima dell'applicazione di avvio potrebbe non essere necessaria.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Passaggio 2: crea tutti i 4 file secondo lo scenario
Nelle attività seguenti azione: ec2_facts viene utilizzato per ottenere fatti da istanze EC2 remote e chiamarli in giochi / attività
file task / 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
attività / disinstallazione_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
attività / 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
Nel codice di distribuzione, se JENKINS viene utilizzato per creare il file WAR, è necessario fornire la directory di origine del file WAR nel copia e la destinazione è la posizione delle webapp del server di destinazione di 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
Passaggio 3: definizione delle variabili
Modifica il file vars / main.yml file e aggiungi il codice come mostrato di seguito.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Passaggio 4: definire le informazioni nella meta cartella
Modifica il file meta / main.yml e aggiungi le tue informazioni come autore, descrizione e azienda.
come impostare un'e-mail falsa
galaxy_info: author: V Niranjan description: Devops specialist company:
Passaggio 5: crea un file site.yml principale
Infine, crea il file site.yml principale per chiamare il ruolo creato che a sua volta aiuterà a distribuire l'applicazione sui server o un elenco di host come da file di inventario. Crea il file come /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Passaggio 6: esegui il file playbook site.yml
$ ansible-playbook site.yml
Avvia l'URL di Tomcat per vedere se l'applicazione è stata distribuita e avviata.
HTTP: //: portno / manager
Integrazione di Jenkins con Ansible
In questa sezione, vedremo come Jenkins può essere integrato con Ansible. Il file WAR creato utilizzando il processo di compilazione verrà utilizzato per distribuire a Tomcat sulla macchina di destinazione utilizzando Ansible. Chiameremo il ruolo Ansible creato nella sezione precedente in Jenkins utilizzando il plugin Ansible.
Quindi, una volta completata la compilazione, la distribuzione del file WAR verrà attivata automaticamente utilizzando Ansible.
Sto mantenendo questo semplice e non ho configurato Sonar o Artifactory o Junit durante le attività di integrazione continua che possono anche essere fatte.
Passaggio 1: creare un processo Jenkins e configurare il repository SCM utilizzando il codice in GitHub
Passaggio 2: configurare la build
Passaggio 3: creare la directory dei ruoli all'interno dell'area di lavoro di Jenkins
Passaggio 4: creare il ruolo tomcat nella posizione dell'area di lavoro di Jenkins utilizzando il comando mostrato di seguito
$ sudo ansible-galaxy init tomcat –offline
Seguire la procedura come nella sezione precedente per creare tutti i file per task, vars, meta e il sito principale site.yml.
qual è il miglior pulitore per computer
Il principale site.yml file viene creato in / var / lib / Jenkins / workspace / directory.
Passaggio 5: configurare il passaggio di post-compilazione di Jenkins per richiamare il playbook Ansible e chiamare il file site.yml. Salva il lavoro.
Passaggio 6: avviare il processo di compilazione e avviare l'URL di Tomcat per verificare se l'applicazione è stata distribuita correttamente.
Gestisci oggetti AWS S3 con Ansible
Il modulo Ansible S3 può essere utilizzato per ottenere o inserire un file in o da un bucket S3. Per utilizzare questo modulo avremo bisogno di installare e configurare votazione modulo di python che funge da API (interfaccia del programma applicativo) per accedere ad AWS. Questo deve essere installato su Macchina di controllo Ansible.
Su Redhat Linux
$ sudo yum install -y python python-dev python-pip
Su Ubuntu
$ apt-get install -y python python-dev python-pip
Una volta fatto quanto sopra, installa boto
$ sudo pip install boto boto3
Se non è possibile eseguire l'installazione, sarà necessario abilitare il repository EPEL. La procedura si trova nella parte 1 della serie di articoli nella sezione installazione ansible.
Una volta fatto quanto sopra, dobbiamo fornire anche le credenziali utente AWS. Puoi esportare le variabili d'ambiente AWS Access e Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Se nel caso, anche dopo aver impostato le variabili di ambiente di cui sopra, si ottiene un errore poiché le credenziali non sono state trovate, è possibile anche specificare lo stesso nel playbook.
Vediamo ora alcuni esempi di come utilizzare Ansible con i bucket S3 e successivamente per creare e terminare le istanze.
Esempio 1:Crea un bucket vuoto con una cartella
--- - 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: Qui viene creata la modalità per la creazione del bucket e l'autorizzazione può essere public-read o public-read-write
Esegui il playbook e visualizza il bucket creato con la cartella di sviluppo al suo interno.
Esempio 2:Per copiare (caricare) un file nel bucket 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
Qui l'oggetto è il file creato all'interno del bucket. Può essere un file o una cartella. In questo caso, è un file. La fonte è il file che viene prelevato dalla macchina locale che è la macchina di controllo Ansible.
Nota:Qui viene messa la modalità per il caricamento dell'oggetto
Esegui il playbook e guarda il bucket S3.
Esempio 3:Ottieni (scarica) il file dal bucket 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:Qui la modalità è ottenere per oggetto di download
Esempio 4:Elimina un oggetto o un file dal bucket 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:Qui la modalità è delobj per eliminare l'oggetto
Esempio 5:Elimina un bucket e tutti i contenuti
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Nota:Qui la modalità è elimina per il bucket di eliminazione
Fornisci un'istanza AWS EC2 utilizzando Ansible
Infine, ti lascerò con una delle funzionalità più importanti di Ansible che è creare o avviare un'istanza AWS EC2 e anche come terminare l'istanza. Naturalmente, non dimenticare di installare votazione che è un prerequisito e garantisce anche di esportare l'utente 'AWS_ACCESS_KEY_ID' e 'AWS_SECRET_ACCESS_KEY'.
Nel caso in cui l'esportazione non funzioni assicurati di aggiungere lo stesso nel codice come mostrato di seguito.
domande e risposte dell'intervista per test di automazione per esperti
Il codice seguente ti mostrerà come creare un'istanza EC2 insieme alla creazione di un gruppo di sicurezza e di una coppia di chiavi.
- Crea un gruppo di sicurezza
- Crea coppia di chiavi e il file PEM
- Crea istanza EC2
- Salva l'indirizzo IP dell'istanza EC2 nel file di inventario ansible
Presumo che gli utenti che eseguono questo esercizio conoscano bene i concetti di AWS EC2.
Aggiungi il codice seguente a un file ed esegui lo stesso per verificare la creazione dell'istanza EC2 nella console AWS. Poiché il codice è grande, è diviso in 2 pagine ma assicurati di salvare tutto in un singolo file 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}}'
Esegui il playbook
/ etc / ansible / ospita il file di inventario aggiornato con IP privato
Accedi all'istanza
ssh -i 'vniranjan.pem' ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Nota:Clicca sull'immagine sottostante per una vista ingrandita)
Gruppo di sicurezza creato
Coppia di chiavi creata
Interruzione delle istanze EC2
In questa sezione scopriamo di più sulla terminazione delle istanze EC2.
Nella schermata seguente puoi vedere che ci sono 2 istanze in esecuzione e i passaggi per la terminazione sarebbero nel seguente ordine:
- Termina le istanze EC2 utilizzando gli ID istanza
- Rimuovi gruppo di sicurezza
- Rimuovi coppia di chiavi
Playbook per terminare entrambe le istanze 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}}'
Sommario
Oggi, la maggior parte delle organizzazioni IT sta cercando un qualche tipo di differenziatore per guadagnare affari e mostrare lo stesso ai propri clienti. Direi che l'automazione è sicuramente uno dei principali fattori di differenziazione.
Con strumenti come Ansible, sono dell'opinione che dovresti essere in grado di automatizzare la maggior parte delle attività manuali ripetitive.
Quindi cosa abbiamo imparato da questo Serie di tutorial Ansible in 3 parti presenta Ansible come uno strumento di gestione della configurazione molto popolare e potente che aiuta in diverse aree di automazione che vanno dall'automazione delle attività, alla distribuzione delle applicazioni e al provisioning del cloud. Pertanto, stiamo principalmente parlando di orchestrazione IT.
Spero che ti sia piaciuta la gamma di tutorial Ansible e sono sicuro che a questo punto avresti acquisito un'immensa conoscenza del concetto.
Successivamente, impareremo come integrare Jenkins con selenio, che fa anche parte della nostra serie di formazione DevOps.
Tutorial PREV | PROSSIMO Tutorial
Lettura consigliata
- Tutorial Ansible: installazione e utilizzo con moduli Ansible
- Integrazione continua in DevOps
- Consegna continua in DevOps
- Integrazione di Jenkins con Selenium WebDriver: tutorial passo passo
- Che cos'è il test di integrazione (tutorial con esempio di test di integrazione)
- Integrazione del selenio con JMeter
- Automazione delle attività utilizzando Ansible Playbook e Ansible Vault con esempi
- Distribuzione continua in DevOps