ansible roles integration with jenkins devops
Podrobný pohled na Ansible Roles, integraci s Jenkins a Ansible S3 a EC2 moduly:
V části 2 z série o výukách Ansible , naučili jsme se, jak se hrací knížky Ans1ible používají k provádění více úkolů a k uvedení všech cílových strojů nebo serverů do konkrétního požadovaného stavu.
Doporučené čtení => Exponenciální výcviková řada DevOps
Možné playbooky jsou primárně soubory YAML, které obsahují více úkolů v jednom obrovském souboru, který není modulární a opakovaně použitelný. Ale pokud potřebujete rozbít celou svou konfiguraci a být více modulární a opakovaně použitelné, pak role Ansible hodně pomohou.
V tomto výukovém programu Ansible , podíváme se na role Ansible, Integrujeme Ansible s Jenkinsem pro nepřetržité doručování z pohledu DevOps a hlavně se podíváme na moduly Ansible S3 a EC2 pro správu instancí AWS EC2 (vytváření a ukončení instancí EC2).
Co se naučíte:
- Možné role
- Jenkinsova integrace s Ansible
- Spravujte objekty AWS S3 pomocí Ansible
- Poskytněte instanci AWS EC2 pomocí Ansible
- Ukončení instancí EC2
- souhrn
- Doporučené čtení
Možné role
S rolemi Ansible můžete seskupovat své proměnné, úkoly, obslužné rutiny atd., Což zvyšuje opětovnou použitelnost a zcela jistě snižuje chyby syntaxe. Pomáhá odstranit nepořádek celého kódu.
Možné role jsou podobné modulům v Loutkách a kuchařkách v Chef.
Chcete-li vytvořit role, použijte ansible-galaxy příkaz, který má všechny šablony k jeho vytvoření.
Příklad scénáře
Po většinu svého života jsem se specializoval na DevOps a pracoval jsem pouze na CI a CD.
Takže například v Continuous Delivery, kde nasazuji nové sestavení mé aplikace J2EE (soubor WAR) do kocoura, budou moje kroky následující:
- Zastavte aplikaci
- Odinstalujte aplikaci
- Nasadit nové sestavení aplikace
- Spusťte aplikaci
Takže bych vytvořil roli s alespoň 4 úkoly a jedním hlavním souborem, který by to volal. Tímto způsobem vytvářím svůj kód více modulární a opakovaně použitelný. Pojďme tedy tuto roli nazvat jako kocour a vytvořte to.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Jakmile je role vytvořena, můžete vidět strukturu adresářů, kterou vytvořila.
Mezi hlavní komponenty, které v této části použijeme, patří:
- úkoly / main.yml - Toto je výchozí bod pro úkoly vytvořené pro danou roli. Soubor main.yml můžete použít k ukázání na další soubory úkolů.
- jehož - Toto slouží k definování všech použitých proměnných.
- meta - Tímto definujete informace o sobě nebo autorovi.
Krok 1: Vytvořte hlavní seznam všech úkolů
Upravte úkoly / main.yml soubor a přidejte níže uvedený kód. Podle výše uvedeného příkladu scénáře definujeme 4 různé úkoly. Ve většině případů aplikace pro nasazení také spustí aplikaci, takže nemusí být vyžadována poslední z počáteční aplikace.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Krok 2: Vytvořte všechny 4 soubory podle scénáře
V níže uvedených úkolech akce: ec2_facts se používá k získávání faktů ze vzdálených instancí EC2 a jejich vyvolání ve hrách / úkolech
soubor tasks / 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
V kódu nasazení, pokud se k sestavení souboru WAR používá JENKINS, musíte zadat zdrojový adresář souboru WAR v kopírovat modul a cílem je umístění webapps cílového serveru 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
Krok 3: Definujte proměnné
Upravte vars / main.yml soubor a přidejte kód, jak je znázorněno níže.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Krok 4: Definujte informace ve složce meta
Upravte soubor meta / main.yml a přidejte své informace, jako je autor, popis a společnost.
technické dotazy a odpovědi na technické dotazy
galaxy_info: author: V Niranjan description: Devops specialist company:
Krok 5: Vytvořte hlavní soubor site.yml
Nakonec vytvořte hlavní soubor site.yml, který zavolá vytvořenou roli, což pomůže nasadit aplikaci na servery nebo seznam hostitelů podle souboru inventáře. Vytvořte soubor jako /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Krok 6: Spusťte soubor playbooku site.yml
$ ansible-playbook site.yml
Spusťte adresu Tomcat URL a zkontrolujte, zda byla aplikace nasazena a spuštěna.
HTTP: //: portno / manager
Jenkinsova integrace s Ansible
V této části uvidíme, jak lze Jenkins integrovat do Ansible. Soubor WAR vytvořený pomocí procesu sestavení bude použit k nasazení do Tomcat na cílovém počítači pomocí Ansible. Budeme volat roli Ansible vytvořenou v předchozí části v Jenkins pomocí pluginu Ansible.
Jakmile je sestavení hotové, nasazení souboru WAR se automaticky spustí pomocí Ansible.
Udržuji to jednoduché a během kontinuálních integračních aktivit, které lze také provést, jsem nenakonfiguroval Sonar, Artifactory nebo Junit.
Krok 1: Vytvořte úlohu Jenkins a nakonfigurujte repo SCM pomocí kódu v GitHubu
Krok 2: Nakonfigurujte sestavení
Krok 3: Vytvořte adresář rolí v pracovním prostoru Jenkins
Krok 4: Vytvořte roli kocoura v umístění pracovního prostoru Jenkins pomocí níže uvedeného příkazu
$ sudo ansible-galaxy init tomcat - offline
Postupujte podle pokynů v předchozí části a vytvořte všechny soubory pro úkoly, vars, meta a hlavní site.yml.
bezplatný čistič systému pro Windows 7
Hlavní site.yml soubor je vytvořen v / var / lib / Jenkins / pracovní prostor / adresář.
Krok 5: Nakonfigurujte krok po sestavení Jenkinse tak, aby vyvolal Anbook playbook a zavolal soubor site.yml. Uložte práci.
Krok 6: Spusťte úlohu sestavení a spusťte adresu URL Tomcat a ověřte, zda je aplikace správně nasazena.
Spravujte objekty AWS S3 pomocí Ansible
Ansible S3 module can be used to get or put a file to or from a S3 bucket. Abyste mohli tento modul používat, budeme muset nainstalovat a nakonfigurovat hlasování modul pythonu, který funguje jako API (rozhraní aplikačního programu) pro přístup k AWS. To musí být nainstalováno na Možný řídicí stroj.
Na Redhat Linux
$ sudo yum install -y python python-dev python-pip
Na Ubuntu
$ apt-get install -y python python-dev python-pip
Jakmile je provedeno výše, nainstalujte boto
$ sudo pip install boto boto3
Pokud nemůžete nainstalovat, budete muset povolit EPEL repo. Postup najdete v části 1 série článků v části instalace ansible.
Jakmile je provedeno výše, musíme také poskytnout pověření uživatele AWS. Můžete exportovat proměnné prostředí AWS Access a Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Pokud v případě, že i po nastavení výše uvedených proměnných prostředí dojde k chybě, protože pověření nebyla nalezena, můžete to samé zadat také v příručce.
Podívejme se nyní na několik příkladů, jak používat Ansible s vědry S3 a později k vytváření a ukončení instancí.
Příklad 1:Vytvořte prázdný segment se složkou
--- - 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
Poznámka: Zde je vytvořen režim pro vytváření kbelíku a oprávnění může být veřejné čtení nebo veřejné čtení a zápis
Spusťte příručku a zobrazte segment vytvořený pomocí vývojové složky v něm.
Příklad 2:Chcete-li zkopírovat (nahrát) soubor do kbelíku 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
Objekt je zde soubor vytvořený v kbelíku. Může to být soubor nebo složka. V tomto případě se jedná o soubor. Zdrojem je soubor, který je vyzvednut z místního počítače, kterým je řídicí stroj Ansible.
Poznámka:Zde je nastaven režim pro nahrávání objektu
Spusťte příručku a podívejte se na kbelík S3.
Příklad 3:Získejte (stáhněte) soubor z kbelíku 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
Poznámka:Zde je režim pro stažení objektu
Příklad 4:Odstraňte objekt nebo soubor z bloku 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
Poznámka:Zde je režim delobj pro odstranění objektu
Příklad 5:Odstraňte kbelík a veškerý obsah
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Poznámka:Zde je režim mazání pro kbelík mazání
Poskytněte instanci AWS EC2 pomocí Ansible
Nakonec vám nechám jednu z nejdůležitějších funkcí Ansible, kterou je vytvoření nebo roztočení instance AWS EC2 a také způsob ukončení instance. Samozřejmě nezapomeňte nainstalovat hlasování což je předpoklad a také zajistit export uživatelů „AWS_ACCESS_KEY_ID“ a „AWS_SECRET_ACCESS_KEY“.
V případě, že export nefunguje, zajistěte přidání stejného kódu, jak je uvedeno níže.
c ++ generuje náhodné číslo mezi 1 a 10
Níže uvedený kód vám ukáže, jak vytvořit instanci EC2 spolu s vytvořením skupiny zabezpečení a dvojice klíčů.
- Vytvořte skupinu zabezpečení
- Vytvořte pár klíčů a soubor PEM
- Vytvořte instanci EC2
- Uložte IP adresu instance EC2 do odpovídajícího souboru inventáře
Předpokládám, že uživatelé provádějící toto cvičení jsou dobře obeznámeni s koncepty AWS EC2.
Přidejte níže uvedený kód do souboru a stejným spuštěním ověřte vytvoření instance EC2 v konzole AWS. Protože je kód velký, je rozdělen na 2 stránky, ale zajistěte, abyste vše uložili do jednoho souboru 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}}'
Spusťte příručku
Soubor inventáře / etc / ansible / hosts aktualizován soukromou IP
Přihlaste se k instanci
ssh -i „vniranjan.pem“ ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Poznámka:Kliknutím na obrázek níže zobrazíte zvětšené zobrazení)
Byla vytvořena skupina zabezpečení
Pár klíčů vytvořen
Ukončení instancí EC2
V této části si povíme více o ukončení instancí EC2.
Na následující obrazovce můžete vidět, že jsou spuštěny 2 instance a kroky pro ukončení by byly v následujícím pořadí:
- Ukončete instance EC2 pomocí ID instance
- Odebrat skupinu zabezpečení
- Odstraňte pár klíčů
Příručka k ukončení obou instancí 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}}'
souhrn
Dnes se většina IT organizací zaměřuje na jakési odlišnosti, které jim pomohou vyhrát obchod a předvést to samé svým klientům. Řekl bych, že automatizace je rozhodně jedním z klíčových rozdílů.
U nástrojů, jako je Ansible, jsem toho názoru, že byste měli být schopni automatizovat většinu opakujících se ručních úkolů.
To, co jsme se z toho naučili Třídílná výuková řada Ansible předvádí Ansible jako velmi populární a výkonný nástroj pro správu konfigurace, který pomáhá v různých oblastech automatizace od automatizace úkolů, nasazení aplikací a zajišťování cloudů. Tím mluvíme především o orchestraci IT.
Doufám, že se vám řada výukových programů Ansible líbila, a jsem si jistá, že byste už o tomto konceptu získali obrovské znalosti.
Dále se naučíme, jak integrovat Jenkins se selenem, který je také součástí naší tréninkové série DevOps.
Výukový program PREV | DALŠÍ výuka
Doporučené čtení
- Výukový program Ansible: Instalace a použití s moduly Ansible
- Kontinuální integrace v DevOps
- Kontinuální doručování v DevOps
- Integrace Jenkins s Selenium WebDriver: Podrobný návod
- Co je testování integrace (kurz s příkladem testování integrace)
- Integrace selenu s JMeter
- Automatizace úloh pomocí Ansible Playbooks a Ansible Vaults s příklady
- Kontinuální nasazení v DevOps