ansible roles integration with jenkins devops
Ein detaillierter Blick auf Ansible Roles, Integration mit Jenkins sowie Ansible S3- und EC2-Module:
In Teil 2 des Serie zu Ansible-Tutorials , Wir haben gelernt, wie Ans1ible-Playbooks verwendet werden, um mehrere Aufgaben auszuführen und alle Zielcomputer oder -server in einen bestimmten gewünschten Zustand zu bringen.
Empfohlenes Lesen => Exponential DevOps Training Series
Ansible Playbooks sind in erster Linie YAML-Dateien, die mehrere Aufgaben in einer einzigen großen Datei enthalten, die nicht modular und wiederverwendbar ist. Wenn Sie jedoch Ihre gesamte Konfiguration aufteilen und modularer und wiederverwendbarer sein müssen, helfen Ansible-Rollen sehr.
In diesem Ansible Tutorial Wir werden uns Ansible-Rollen ansehen, Ansible in Jenkins für die kontinuierliche Bereitstellung aus DevOps-Sicht integrieren und vor allem Ansible S3- und EC2-Module für die Verwaltung von AWS EC2-Instanzen (Erstellen und Beenden von EC2-Instanzen) betrachten.
Was du lernen wirst:
- Ansible Rollen
- Jenkins Integration mit Ansible
- Verwalten Sie AWS S3-Objekte mit Ansible
- Stellen Sie eine AWS EC2-Instanz mit Ansible bereit
- EC2-Instanzen beenden
- Zusammenfassung
- Literatur-Empfehlungen
Ansible Rollen
Mit Ansible-Rollen können Sie Ihre Variablen, Aufgaben, Handler usw. gruppieren, was die Wiederverwendbarkeit erhöht und mit Sicherheit Syntaxfehler reduziert. Es hilft, den gesamten Code übersichtlich zu gestalten.
Ansible Rollen ähneln Modulen in Puppet und Kochbüchern in Chef.
Um Rollen zu erstellen, verwenden Sie die Ansible-Galaxie Befehl, der alle Vorlagen zum Erstellen enthält.
Beispielszenario
Ich war fast mein ganzes Leben lang DevOps-Spezialist und habe nur mit CI und CD gearbeitet.
Zum Beispiel in Continuous Delivery, wo ich einen neuen Build meiner J2EE-Anwendung (WAR-Datei) für Tomcat bereitstelle, lauten meine Schritte wie folgt:
- Beenden Sie die Anwendung
- Deinstallieren Sie die Anwendung
- Stellen Sie den neuen Build einer Anwendung bereit
- Starten Sie die Anwendung
Ich würde also eine Rolle mit mindestens 4 Aufgaben und einer Hauptdatei erstellen, die sie aufruft. Auf diese Weise mache ich meinen Code modularer und wiederverwendbarer. Nennen wir diese Rolle also als Kater und erschaffe es.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Sobald die Rolle erstellt wurde, können Sie die Verzeichnisstruktur sehen, die sie erstellt hat.
Die Hauptkomponenten, die wir in diesem Abschnitt verwenden werden, umfassen:
- Aufgaben / main.yml - Dies ist der Ausgangspunkt für Aufgaben, die für die Rolle erstellt wurden. Sie können die Datei main.yml verwenden, um auf die anderen Aufgabendateien zu verweisen.
- deren - Hiermit werden alle verwendeten Variablen definiert.
- Meta - Hiermit definieren Sie Informationen über sich selbst oder den Autor.
Schritt 1: Erstellen Sie die Hauptliste aller Aufgaben
Bearbeiten Sie die Aufgaben / main.yml Datei und fügen Sie den folgenden Code hinzu. Gemäß dem oben erwähnten Beispielszenario definieren wir 4 verschiedene Aufgaben. In den meisten Fällen startet die Bereitstellungsanwendung auch die Anwendung, sodass möglicherweise nicht die letzte der Startanwendung erforderlich ist.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Schritt 2: Erstellen Sie alle 4 Dateien gemäß dem Szenario
In den folgenden Aufgaben Aktion: ec2_facts wird verwendet, um Fakten von entfernten EC2-Instanzen abzurufen und sie in Spielen / Aufgaben aufzurufen
Aufgaben / stop_app.yml Datei
--- - 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
task / 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
task / 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
Wenn im Bereitstellungscode JENKINS zum Erstellen der WAR-Datei verwendet wird, müssen Sie das Quellverzeichnis der WAR-Datei in der Datei angeben Kopieren Modul und das Ziel ist der Ziel-Server-Webanwendungsspeicherort von 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
Schritt 3: Variablen definieren
Bearbeiten Sie die vars / main.yml Datei und fügen Sie den Code wie unten gezeigt hinzu.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Schritt 4: Definieren Sie Informationen im Meta-Ordner
Bearbeiten Sie die Datei meta / main.yml und fügen Sie Ihre Informationen wie Autor, Beschreibung und Firma hinzu.
Präprozessor-Direktiven in c ++ mit Beispiel
galaxy_info: author: V Niranjan description: Devops specialist company:
Schritt 5: Erstellen Sie eine Hauptdatei site.yml
Zuletzt erstellen Sie die Hauptdatei site.yml, um die erstellte Rolle aufzurufen, die wiederum dazu beiträgt, die Anwendung auf den Servern oder einer Liste von Hosts gemäß der Inventardatei bereitzustellen. Erstellen Sie die Datei als /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Schritt 6: Führen Sie die Playbook-Datei site.yml aus
$ ansible-playbook site.yml
Starten Sie die Tomcat-URL, um festzustellen, ob die Anwendung bereitgestellt und gestartet wurde.
HTTP: //: portno / manager
Jenkins Integration mit Ansible
In diesem Abschnitt werden wir sehen, wie Jenkins in Ansible integriert werden kann. Die mithilfe des Erstellungsprozesses erstellte WAR-Datei wird verwendet, um Tomcat mithilfe von Ansible auf dem Zielcomputer bereitzustellen. Wir werden die Ansible-Rolle aufrufen, die im vorherigen Abschnitt in Jenkins mit dem Ansible-Plugin erstellt wurde.
Sobald der Build abgeschlossen ist, wird die Bereitstellung der WAR-Datei automatisch mit Ansible ausgelöst.
Ich halte dies einfach und habe Sonar oder Artifactory oder Junit während der kontinuierlichen Integrationsaktivitäten, die auch durchgeführt werden können, nicht konfiguriert.
Schritt 1: Erstellen Sie einen Jenkins-Job und konfigurieren Sie das SCM-Repo mithilfe des Codes in GitHub
Schritt 2: Konfigurieren Sie den Build
Schritt 3: Erstellen Sie ein Rollenverzeichnis im Jenkins-Arbeitsbereich
Schritt 4: Erstellen Sie die Tomcat-Rolle am Jenkins-Arbeitsbereich mit dem unten gezeigten Befehl
$ sudo ansible-galaxy init tomcat –offline
Befolgen Sie die Anweisungen im vorherigen Abschnitt, um alle Dateien für zu erstellen Aufgaben, Vars, Meta und die Hauptseite.yml.
pl sql Interview Fragen und Antworten für erfahrene PDF
Die Haupt site.yml Datei wird in erstellt / var / lib / Jenkins / workspace / Verzeichnis.
Schritt 5: Konfigurieren Sie den Jenkins-Post-Build-Schritt so, dass das Ansible-Playbook aufgerufen und die Datei site.yml aufgerufen wird. Speichern Sie den Job.
Schritt 6: Lösen Sie den Build-Job aus und starten Sie die Tomcat-URL, um zu überprüfen, ob die Anwendung ordnungsgemäß bereitgestellt wurde.
Verwalten Sie AWS S3-Objekte mit Ansible
Das Ansible S3-Modul kann verwendet werden, um eine Datei in oder aus einem S3-Bucket abzurufen oder abzulegen. Um dieses Modul verwenden zu können, müssen wir es installieren und konfigurieren Abstimmung Python-Modul, das als API (Application Program Interface) für den Zugriff auf AWS fungiert. Dies muss auf dem installiert werden Ansible Steuermaschine.
Unter Redhat Linux
$ sudo yum install -y python python-dev python-pip
Auf Ubuntu
$ apt-get install -y python python-dev python-pip
Sobald dies erledigt ist, installieren Sie boto
$ sudo pip install boto boto3
Wenn die Installation nicht möglich ist, müssen Sie EPEL Repo aktivieren. Die Vorgehensweise finden Sie in Teil 1 der Artikelserie im Abschnitt Installation ansible.
Sobald dies erledigt ist, müssen wir auch AWS-Benutzeranmeldeinformationen bereitstellen. Sie können die Umgebungsvariablen AWS Access und Secret Key exportieren
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Wenn auch nach dem Festlegen der oben genannten Umgebungsvariablen eine Fehlermeldung angezeigt wird, da die Anmeldeinformationen nicht gefunden wurden, können Sie diese auch im Playbook angeben.
Schauen wir uns nun einige Beispiele für die Verwendung von Ansible mit S3-Buckets und später zum Erstellen und Beenden von Instanzen an.
Beispiel 1:Erstellen Sie einen leeren Eimer mit einem Ordner
--- - 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
Hinweis: Hier wird der Modus zum Erstellen eines Buckets erstellt und die Berechtigung kann öffentlich gelesen oder öffentlich gelesen und geschrieben werden
Führen Sie das Playbook aus und zeigen Sie den Bucket an, der mit dem darin enthaltenen Entwicklungsordner erstellt wurde.
Beispiel 2:Kopieren (Hochladen) einer Datei in den 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
Hier ist das Objekt die Datei, die im Bucket erstellt wurde. Es kann eine Datei oder ein Ordner sein. In diesem Fall handelt es sich um eine Datei. Die Quelle ist die Datei, die vom lokalen Computer, dem Ansible-Steuercomputer, abgerufen wird.
Hinweis:Hier wird der Modus zum Hochladen von Objekten eingestellt
Führen Sie das Playbook aus und sehen Sie sich den S3-Bucket an.
Beispiel 3:Holen Sie sich die Datei aus dem S3-Bucket (laden Sie sie herunter)
--- - 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
Hinweis:Hier wird der Modus zum Download angeboten
Beispiel 4:Löschen Sie ein Objekt oder eine Datei aus dem S3-Bucket
--- - 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
Hinweis:Hier ist der Modus delobj zum Löschen von Objekten
Beispiel 5:Löschen Sie einen Eimer und den gesamten Inhalt
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Hinweis:Hier wird der Modus für den Lösch-Bucket gelöscht
Stellen Sie eine AWS EC2-Instanz mit Ansible bereit
Zuletzt möchte ich Ihnen eine der wichtigsten Funktionen von Ansible überlassen, nämlich das Erstellen oder Hochfahren einer AWS EC2-Instanz und das Beenden der Instanz. Vergessen Sie natürlich nicht zu installieren Abstimmung Dies ist eine Voraussetzung und stellt auch sicher, dass die Benutzer 'AWS_ACCESS_KEY_ID' und 'AWS_SECRET_ACCESS_KEY' exportiert werden.
Falls der Export nicht funktioniert, stellen Sie sicher, dass Sie den gleichen Code wie unten gezeigt hinzufügen.
Linux findet Unterschied zwischen zwei Dateien
Der folgende Code zeigt Ihnen, wie Sie eine EC2-Instanz zusammen mit einer Sicherheitsgruppe und einem Schlüsselpaar erstellen.
- Erstellen Sie eine Sicherheitsgruppe
- Erstellen Sie ein Schlüsselpaar und die PEM-Datei
- Erstellen Sie eine EC2-Instanz
- Speichern Sie die IP-Adresse der EC2-Instanz in der ansible Inventardatei
Ich gehe davon aus, dass die Benutzer, die diese Übung durchführen, mit den AWS EC2-Konzepten vertraut sind.
Fügen Sie den folgenden Code zu einer Datei hinzu und führen Sie denselben aus, um die Erstellung der EC2-Instanz in der AWS-Konsole zu überprüfen. Da der Code groß ist, ist er in zwei Seiten aufgeteilt, aber stellen Sie sicher, dass Sie alle in einer einzigen yml-Datei speichern.
--- - 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}}'
Führen Sie das Playbook aus
/ etc / ansible / hosts Inventardatei mit privater IP aktualisiert
Melden Sie sich bei der Instanz an
ssh -i 'vniranjan.pem' ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Hinweis:Klicken Sie auf das Bild unten für eine vergrößerte Ansicht.
Sicherheitsgruppe erstellt
Schlüsselpaar erstellt
EC2-Instanzen beenden
In diesem Abschnitt erfahren Sie mehr über das Beenden von EC2-Instanzen.
Auf dem folgenden Bildschirm sehen Sie, dass zwei Instanzen ausgeführt werden und die Schritte zum Beenden in der folgenden Reihenfolge ausgeführt werden:
- Beenden Sie die EC2-Instanzen mit den Instanz-IDs
- Sicherheitsgruppe entfernen
- Schlüsselpaar entfernen
Playbook zum Beenden beider EC2-Instanzen
--- - 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}}'
Zusammenfassung
Heutzutage suchen die meisten IT-Organisationen nach Unterscheidungsmerkmalen, um Geschäfte zu machen und ihren Kunden dasselbe zu präsentieren. Ich würde sagen, Automatisierung ist definitiv eines der wichtigsten Unterscheidungsmerkmale.
Mit Tools wie Ansible bin ich der Meinung, dass Sie in der Lage sein sollten, die meisten sich wiederholenden manuellen Aufgaben zu automatisieren.
Also, was wir daraus gelernt haben 3-teilige Ansible Tutorial-Reihe präsentiert Ansible als ein sehr beliebtes und leistungsstarkes Konfigurationsmanagement-Tool, das in verschiedenen Bereichen der Automatisierung hilft, von Aufgabenautomatisierung über Anwendungsbereitstellung bis hin zur Cloud-Bereitstellung. Dabei geht es in erster Linie um IT-Orchestrierung.
Ich hoffe, Ihnen hat die Auswahl an Ansible-Tutorials gefallen, und ich bin sicher, dass Sie inzwischen immense Kenntnisse über das Konzept erworben haben.
Als nächstes lernen wir, wie man Jenkins in Selen integriert, was auch Teil unserer DevOps-Trainingsreihe ist.
PREV Tutorial | NÄCHSTES Tutorial
Literatur-Empfehlungen
- Ansible Tutorial: Installation und Verwendung mit Ansible Modules
- Kontinuierliche Integration in DevOps
- Kontinuierliche Lieferung in DevOps
- Integration von Jenkins in Selenium WebDriver: Schritt-für-Schritt-Anleitung
- Was ist Integrationstest (Tutorial mit Beispiel für Integrationstests)
- Integration von Selen mit JMeter
- Aufgabenautomatisierung mit Ansible Playbooks und Ansible Vaults mit Beispielen
- Kontinuierliche Bereitstellung in DevOps