ansible roles integration with jenkins devops
По-задълбочен поглед върху Ansible Roles, интеграция с Jenkins и Ansible S3 и EC2 модули:
В част 2 от поредица за Ansible уроци , научихме как Ans1ible playbooks се използват за изпълнение на множество задачи и за привеждане на всички целеви машини или сървъри в определено желано състояние.
Препоръчително четене => Експоненциална серия за обучение на DevOps
Ansible playbooks са предимно YAML файлове, които съдържат множество задачи в един единствен огромен файл, който не е модулен и може да се използва повторно. Но ако трябва да разбиете цялата си конфигурация и да бъдете по-модулни и многократно използвани, тогава Ansible ролите ще ви помогнат много.
В този урок за Ansible , ще разгледаме ролите Ansible, Интегрирайте Ansible с Jenkins за непрекъсната доставка от гледна точка на DevOps и най-важното ще разгледаме модулите Ansible S3 и EC2 за управление на екземпляри AWS EC2 (Създаване и прекратяване на екземпляри EC2).
Какво ще научите:
- Отговорни роли
- Интеграция на Дженкинс с Ansible
- Управление на AWS S3 обекти с Ansible
- Осигурете екземпляр на AWS EC2, използвайки Ansible
- Прекратяване на екземпляри EC2
- Обобщение
- Препоръчително четене
Отговорни роли
С Ansible role можете да групирате вашите променливи, задачи, манипулатори и т.н., които увеличават повторната употреба и със сигурност намаляват синтаксисните грешки. Помага за премахване на претрупването на целия код.
Отговорните роли са подобни на модулите в Puppet и готварските книги в Chef.
За да създадете роли, използвате анзиб-галактика команда, която има всички шаблони за създаването му.
Примерен сценарий
През по-голямата част от живота си съм специалист по DevOps и работя само в CI и CD.
Така например за Пример за непрекъсната доставка, където внедрявам нова компилация на моето J2EE приложение (WAR файл), за да tomcat стъпките ми ще бъдат както следва:
- Спрете приложението
- Деинсталирайте приложението
- Разгърнете новата компилация на приложение
- Стартирайте приложението
Така че щях да създавам роля с поне 4 задачи и един основен файл, който я извиква. По този начин правя кода си по-модулен и многократно използваем. Така че нека наречем тази роля като tomcat и да го създадете.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
След като ролята е създадена, можете да видите структурата на директориите, която е създала.
Основните компоненти, които ще използваме в този раздел, включват:
- задачи / main.yml - Това е отправна точка за задачи, създадени за ролята. Можете да използвате файла main.yml, за да посочите другите файлове със задачи.
- чия - Това е да се дефинират всички използвани променливи.
- мета - Това е да се определи информация за себе си или за автора.
Стъпка 1: Създайте основния списък с всички задачи
Редактирайте задачи / main.yml файл и добавете кода по-долу. Според примерния сценарий, споменат по-горе, ние определяме 4 различни задачи. В повечето случаи приложението за разполагане също ще стартира приложението, така че последното от стартиращото приложение може да не се изисква.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Стъпка 2: Създайте всички 4 файла според сценария
В задачите по-долу действие: ec2_facts се използва за получаване на факти от отдалечени екземпляри на EC2 и извикването им в пиеси / задачи
задачи / 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
задачи / 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
задачи / разполагане_апп.имл
--- - 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
В кода за разполагане, ако JENKINS се използва за изграждане на WAR файла, тогава трябва да предоставите директорията източник на WAR файла в копие модул и местоназначението е местоположението на целевия сървър webapps на 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
Стъпка 3: Определете променливите
Редактирайте vars / main.yml файл и добавете кода, както е показано по-долу.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Стъпка 4: Определете информация в мета папката
Редактирайте файла meta / main.yml и добавете вашата информация като автор, описание и компания.
как да стартирам java проект -
galaxy_info: author: V Niranjan description: Devops specialist company:
Стъпка 5: Създайте основен файл site.yml
И накрая, създайте главния файл site.yml, за да извикате създадената роля, която от своя страна ще помогне за разгръщането на приложението на сървърите или списък с хостове според файла на инвентара. Създайте файла като /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Стъпка 6: Стартирайте файл на playbook файл site.yml
$ ansible-playbook site.yml
Стартирайте URL адреса на Tomcat, за да видите дали приложението е внедрено и стартирано.
HTTP: //: portno / manager
Интеграция на Дженкинс с Ansible
В този раздел ще видим как Дженкинс може да бъде интегриран с Ansible. Файлът WAR, създаден с помощта на процеса на изграждане, ще бъде използван за разполагане в Tomcat на целевата машина с помощта на Ansible. Ще извикаме ролята Ansible, създадена в предишния раздел в Jenkins, използвайки приставката Ansible.
Така че, след като компилацията приключи, разполагането на WAR файла ще се задейства автоматично с помощта на Ansible.
Поддържам това просто и не съм конфигурирал Sonar или Artifactory или Junit по време на непрекъснатите дейности по интеграция, които също могат да бъдат направени.
Стъпка 1: Създайте работа на Jenkins и конфигурирайте SCP репото, използвайки кода в GitHub
Стъпка 2: Конфигурирайте компилацията
Стъпка 3: Създайте директория за роли в работното пространство на Jenkins
Стъпка 4: Създайте ролята на tomcat в местоположението на работното пространство на Jenkins, като използвате командата, показана по-долу
$ sudo ansible-galaxy init tomcat – офлайн
Следвайте процедурата, както в предишния раздел, за да създадете всички файлове за задачи, vars, мета и основния сайт.yml.
най-добър уау сървър за нови играчи 2017
Основното site.yml файлът е създаден в / var / lib / Jenkins / работно пространство / директория.
Стъпка 5: Конфигурирайте стъпката на Jenkins след изграждане, за да извикате Ansible playbook и да извикате файла site.yml. Запазете работата.
Стъпка 6: Задействайте заданието за изграждане и стартирайте URL адреса на Tomcat, за да проверите дали приложението е разположено правилно.
Управление на AWS S3 обекти с Ansible
Модулът Ansible S3 може да се използва за получаване или поставяне на файл към или от група S3. За да използваме този модул, ще трябва да инсталираме и конфигурираме гласувайте модул на python, който действа като API (интерфейс на приложна програма) за достъп до AWS. Това трябва да бъде инсталирано на Отговаряща машина за управление.
На Redhat Linux
$ sudo yum install -y python python-dev python-pip
На Ubuntu
$ apt-get install -y python python-dev python-pip
След като горното приключи, инсталирайте boto
$ sudo pip install boto boto3
Ако не можете да инсталирате, ще трябва да активирате EPEL репо. Процедурата може да бъде намерена в част 1 от поредицата статии в раздела за инсталиране на ansible.
След като приключи горното, ние също трябва да предоставим идентификационни данни на потребителите на AWS. Можете да експортирате променливите на средата AWS Access и Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Ако в случай, че дори след задаване на горните променливи на средата получите грешка, тъй като идентификационните данни не са намерени, можете също да посочите същото в книгата за игри.
Нека сега разгледаме някои примери за това как да използваме Ansible с сегменти S3 и по-късно за създаване и прекратяване на екземпляри.
Пример 1:Създайте празна кофа с папка
--- - 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
Забележка: Тук режимът е създаден за създаване на група и Разрешението може да бъде публично четене или публично четене-писане
Стартирайте книгата за игри и вижте кофата, създадена с папката за разработка в нея.
Пример 2:За да копирате (качите) файл в кофа 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
Тук обектът е файлът, създаден в групата. Това може да бъде файл или папка. В този случай това е файл. Източникът е файлът, който е взет от локалната машина, която е контролната машина Ansible.
Забележка:Тук е поставен режимът за качване на обект
Стартирайте книгата за игри и погледнете кофата S3.
Пример 3:Вземете (изтеглете) файла от кофа 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
Забележка:Тук режимът е get за изтегляне на обект
Пример 4:Изтрийте обект или файл от сегмента 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
Забележка:Тук режимът е delobj за изтриване на обект
Пример 5:Изтрийте кофа и цялото съдържание
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Забележка:Тук режимът е изтриване за групата за изтриване
Осигурете екземпляр на AWS EC2, използвайки Ansible
И накрая, ще ви оставя една от най-важните функции на Ansible, която е да създадете или завъртите AWS EC2 екземпляр и също как да прекратите екземпляра. Разбира се, не забравяйте да инсталирате гласувайте което е предварително условие и също така гарантира експорт на потребителя “AWS_ACCESS_KEY_ID” и “AWS_SECRET_ACCESS_KEY”.
В случай, че експортирането не работи, уверете се, че сте добавили същото в кода, както е показано по-долу.
добра безплатна защитна стена за Windows 10
Кодът по-долу ще ви покаже как да създадете екземпляр EC2 заедно със създаването на група за сигурност и двойка ключове.
- Създайте група за сигурност
- Създайте двойка ключове и PEM файла
- Създайте екземпляр EC2
- Запишете IP адреса на екземпляра EC2 във файла с инвентаризацията на ansible
Предполагам, че потребителите, които правят това упражнение, са добре запознати с концепциите на AWS EC2.
Добавете кода по-долу към файл и стартирайте същия, за да проверите създаването на екземпляра EC2 в конзолата AWS. Тъй като кодът е голям, той е разделен на 2 страници, но се уверете, че записвате всички в един 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}}'
Стартирайте книгата за игри
/ etc / ansible / хоства инвентарен файл, актуализиран с частен IP
Влезте в екземпляра
ssh -i “vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Забележка:Щракнете върху изображението по-долу за увеличен изглед)
Групата за сигурност е създадена
Създадена е двойка ключове
Прекратяване на екземпляри EC2
В този раздел нека знаем повече за прекратяване на екземпляри EC2.
На следващия екран можете да видите, че се изпълняват 2 екземпляра и стъпките за прекратяване ще бъдат в следния ред:
- Прекратете екземплярите EC2, като използвате идентификационни номера на инстанцията
- Премахнете групата за сигурност
- Премахнете двойката ключове
Playbook за прекратяване на двата екземпляра 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}}'
Обобщение
Днес повечето ИТ организации търсят някакъв вид диференциатори, за да спечелят бизнес и да покажат същото на своите клиенти. Бих казал, че автоматизацията определено е един от ключовите диференциатори.
С инструменти като Ansible съм на мнение, че трябва да можете да автоматизирате повечето повтарящи се ръчни задачи.
По този начин това, което сме научили от това 3-частна поредица Ansible Tutorial демонстрира Ansible като много популярен и мощен инструмент за управление на конфигурацията, който помага в различни области на автоматизация, вариращи от автоматизация на задачи, внедряване на приложения и предоставяне на облак. По този начин говорим предимно за ИТ оркестрация.
Надявам се, че сте се насладили на гамата от уроци по Ansible и съм сигурен, че досега бихте получили огромни познания по концепцията.
След това ще научим как да интегрираме Дженкинс със селен, който също е част от нашата серия за обучение DevOps.
Препоръчително четене
- Ansible Tutorial: Инсталиране и използване с Ansible модули
- Непрекъсната интеграция в DevOps
- Непрекъсната доставка в DevOps
- Интеграция на Jenkins с Selenium WebDriver: Урок стъпка по стъпка
- Какво е тестване на интеграция (урок с пример за тестване на интеграция)
- Интеграция на селен с JMeter
- Автоматизация на задачите с помощта на Ansible Playbooks и Ansible Vault с примери
- Непрекъснато внедряване в DevOps