ansible roles integration with jenkins devops
Dogłębne spojrzenie na role Ansible, integrację z Jenkins oraz moduły Ansible S3 i EC2:
W części 2 z seria poradników Ansible , dowiedzieliśmy się, w jaki sposób playbooki Ans1ible są używane do wykonywania wielu zadań i doprowadzania wszystkich maszyn docelowych lub serwerów do określonego pożądanego stanu.
Zalecana lektura => Seria szkoleń wykładniczych DevOps
Playbooki Ansible to głównie pliki YAML, które zawierają wiele zadań w jednym ogromnym pliku, który nie jest modułowy ani wielokrotnego użytku. Ale jeśli potrzebujesz rozbić całą konfigurację i być bardziej modułowym i wielokrotnego użytku, role Ansible bardzo pomogą.
W tym samouczku Ansible , przyjrzymy się rolom Ansible, Zintegruj Ansible z Jenkins, aby zapewnić ciągłe dostarczanie z punktu widzenia DevOps, a przede wszystkim przyjrzymy się modułom Ansible S3 i EC2 do zarządzania instancjami AWS EC2 (tworzenie i kończenie instancji EC2).
Czego się nauczysz:
- Ansible Roles
- Integracja Jenkinsa z Ansible
- Zarządzaj obiektami AWS S3 za pomocą Ansible
- Udostępnij instancję AWS EC2 przy użyciu Ansible
- Kończenie instancji EC2
- Podsumowanie
- rekomendowane lektury
Ansible Roles
Dzięki rolom Ansible możesz grupować zmienne, zadania, programy obsługi itp., Co zwiększa możliwość ponownego wykorzystania, a na pewno zmniejsza liczbę błędów składniowych. Pomaga uporządkować cały kod.
Role Ansible są podobne do modułów w Puppet i książkach kucharskich w Chef.
Aby utworzyć role, używasz galaktyka ansibla polecenie, które ma wszystkie szablony do jego utworzenia.
Przykładowy scenariusz
Przez większość swojego życia byłem specjalistą ds. DevOps i pracowałem tylko w zakresie CI i CD.
Na przykład w przypadku ciągłego dostarczania, w którym wdrażam nową kompilację mojej aplikacji J2EE (plik WAR) do tomcat, moje kroki byłyby następujące:
- Zatrzymaj aplikację
- Odinstaluj aplikację
- Wdróż nową kompilację aplikacji
- Uruchom aplikację
Dlatego utworzyłbym rolę z co najmniej 4 zadaniami i jednym głównym plikiem, który ją wywołuje. W ten sposób uczynię mój kod bardziej modułowym i wielokrotnego użytku. Nazwijmy więc tę rolę jako kocur i stwórz to.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Po utworzeniu roli możesz zobaczyć strukturę katalogów, którą utworzyła.
Główne komponenty, których użyjemy w tej sekcji, to:
- zadania / main.yml - To jest punkt wyjścia dla zadań utworzonych dla roli. Możesz użyć pliku main.yml, aby wskazać inne pliki zadań.
- którego - Ma to na celu zdefiniowanie wszelkich użytych zmiennych.
- meta - Ma to na celu określenie informacji o sobie lub autorze.
Krok 1: Utwórz główną listę wszystkich zadań
Edytuj plik zadania / main.yml plik i dodaj poniższy kod. Zgodnie z powyższym przykładowym scenariuszem definiujemy 4 różne zadania. W większości przypadków aplikacja wdrażająca również uruchomi aplikację, więc ostatnia aplikacja początkowa może nie być wymagana.
--- # 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: Utwórz wszystkie 4 pliki zgodnie ze scenariuszem
W poniższych zadaniach action: ec2_facts służy do pobierania faktów ze zdalnych instancji EC2 i wywoływania ich w zabawach / zadaniach
Tasks / stop_app.yml plik
--- - 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
W kodzie wdrażania, jeśli JENKINS jest używany do budowania pliku WAR, musisz podać katalog źródłowy pliku WAR w Kopiuj moduł, a miejscem docelowym jest lokalizacja aplikacji webapps serwera docelowego 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: Zdefiniuj zmienne
Edytuj plik vars / main.yml plik i dodaj kod, jak pokazano poniżej.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Krok 4: Zdefiniuj informacje w folderze meta
Edytuj plik meta / main.yml i dodaj informacje, takie jak autor, opis i firma.
przekonwertuj wideo z YouTube'a na mp4 online za darmo
galaxy_info: author: V Niranjan description: Devops specialist company:
Krok 5: Utwórz główny plik site.yml
Na koniec utwórz główny plik site.yml, aby wywołać utworzoną rolę, co z kolei pomoże wdrożyć aplikację na serwerach lub listę hostów zgodnie z plikiem spisu. Utwórz plik jako /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Krok 6: Uruchom plik playbook site.yml
$ ansible-playbook site.yml
Uruchom adres URL Tomcat, aby sprawdzić, czy aplikacja została wdrożona i uruchomiona.
HTTP: //: portno / manager
Integracja Jenkinsa z Ansible
W tej sekcji zobaczymy, jak można zintegrować Jenkins z Ansible. Plik WAR utworzony przy użyciu procesu kompilacji zostanie użyty do wdrożenia na serwerze Tomcat na komputerze docelowym przy użyciu Ansible. Będziemy wywoływać rolę Ansible utworzoną w poprzedniej sekcji w Jenkins za pomocą wtyczki Ansible.
Po zakończeniu kompilacji wdrożenie pliku WAR zostanie automatycznie uruchomione za pomocą Ansible.
Utrzymuję to w prostocie i nie skonfigurowałem Sonar, Artifactory ani Junit podczas ciągłych działań integracyjnych, które również można wykonać.
Krok 1: Utwórz zadanie Jenkins i skonfiguruj repozytorium SCM za pomocą kodu w GitHub
Krok 2: Skonfiguruj plik build
Krok 3: Utwórz katalog ról w obszarze roboczym Jenkins
Krok 4: Utwórz rolę tomcat w lokalizacji obszaru roboczego Jenkins za pomocą polecenia pokazanego poniżej
$ sudo ansible-galaxy init tomcat –offline
Postępuj zgodnie z procedurą opisaną w poprzedniej sekcji, aby utworzyć wszystkie pliki dla task, vars, meta i main site.yml.
jak rozpocząć projekt w eclipse
Główny site.yml plik jest tworzony w / var / lib / Jenkins / workspace / informator.
Krok 5: Skonfiguruj krok po kompilacji Jenkinsa, aby wywoływał Playbook Ansible i wywoływał plik site.yml. Zapisz pracę.
Krok 6: Uruchom zadanie kompilacji i uruchom adres URL Tomcat, aby sprawdzić, czy aplikacja została poprawnie wdrożona.
Zarządzaj obiektami AWS S3 za pomocą Ansible
Moduł Ansible S3 może służyć do pobierania lub wysyłania pliku do lub z zasobnika S3. Aby korzystać z tego modułu, będziemy musieli zainstalować i skonfigurować głosować moduł Pythona, który działa jako API (interfejs programu aplikacji) w celu uzyskania dostępu do AWS. To musi być zainstalowane na Ansible maszyna sterująca.
W systemie Redhat Linux
$ sudo yum install -y python python-dev python-pip
Na Ubuntu
$ apt-get install -y python python-dev python-pip
Po wykonaniu powyższych czynności zainstaluj boto
$ sudo pip install boto boto3
Jeśli nie możesz zainstalować, musisz włączyć repozytorium EPEL. Procedurę można znaleźć w pierwszej części serii artykułów w części dotyczącej instalacji ansibli.
Po wykonaniu powyższego musimy również podać poświadczenia użytkownika AWS. Możesz wyeksportować zmienne środowiskowe AWS Access i Secret Key
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Jeśli w przypadku, nawet po ustawieniu powyższych zmiennych środowiskowych, pojawi się błąd, ponieważ poświadczenia nie zostały znalezione, możesz również określić to samo w playbooku.
Przyjrzyjmy się teraz kilku przykładom, jak używać Ansible z zasobnikami S3 i później do tworzenia i kończenia instancji.
Przykład 1:Utwórz puste wiadro z folderem
--- - 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
Uwaga: Tutaj tryb jest tworzony do tworzenia zasobnika, a uprawnienia mogą być publiczne do odczytu lub do publicznego odczytu i zapisu
Uruchom playbook i wyświetl zasobnik utworzony z folderem deweloperskim w nim.
Przykład 2:Aby skopiować (przesłać) plik do zasobnika 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
Tutaj obiektem jest plik utworzony w zasobniku. Może to być plik lub folder. W tym przypadku jest to plik. Źródłem jest plik, który jest pobierany z komputera lokalnego, który jest maszyną sterującą Ansible.
Uwaga:Tutaj ustawiony jest tryb wgrywania obiektu
Uruchom podręcznik i spójrz na wiadro S3.
Przykład 3:Pobierz (pobierz) plik z zasobnika 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
Uwaga:Tutaj tryb pobierania obiektu
Przykład 4:Usuń obiekt lub plik z zasobnika 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
Uwaga:Tutaj tryb jest delobj do usuwania obiektu
Przykład 5:Usuń zasobnik i całą zawartość
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Uwaga:Tutaj tryb jest usuwany dla zasobnika usuwania
Udostępnij instancję AWS EC2 przy użyciu Ansible
Na koniec zostawię Wam jedną z najważniejszych funkcji Ansible, czyli tworzenie lub uruchamianie instancji AWS EC2, a także sposób jej zakończenia. Oczywiście nie zapomnij zainstalować głosować co jest warunkiem wstępnym, a także zapewnia wyeksportowanie użytkownika „AWS_ACCESS_KEY_ID” i „AWS_SECRET_ACCESS_KEY”.
W przypadku, gdy eksport nie działa, należy dodać to samo w kodzie, jak pokazano poniżej.
jak zadeklarować listę połączoną w java
Poniższy kod pokazuje, jak utworzyć instancję EC2 wraz z tworzeniem grupy zabezpieczeń i pary kluczy.
- Utwórz grupę zabezpieczeń
- Utwórz parę kluczy i plik PEM
- Utwórz instancję EC2
- Zapisz adres IP instancji EC2 w pliku spisowym ansible
Zakładam, że użytkownicy wykonujący to ćwiczenie są dobrze zorientowani w koncepcjach AWS EC2.
Dodaj poniższy kod do pliku i uruchom to samo, aby zweryfikować utworzenie instancji EC2 w konsoli AWS. Ponieważ kod jest duży, jest podzielony na 2 strony, ale pamiętaj, aby zapisać wszystko w jednym pliku 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}}'
Uruchom playbook
Plik spisu / etc / ansible / hosts zaktualizowany o prywatny adres IP
Zaloguj się do instancji
ssh -i „vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Uwaga:Kliknij poniższy obrazek, aby powiększyć widok)
Utworzono grupę zabezpieczeń
Utworzono parę kluczy
Kończenie instancji EC2
W tej sekcji dowiemy się więcej o zamykaniu instancji EC2.
Na poniższym ekranie widać, że są uruchomione 2 instancje, a kroki do zakończenia będą przebiegały w następującej kolejności:
- Zakończ instancje EC2 przy użyciu identyfikatorów instancji
- Usuń grupę bezpieczeństwa
- Usuń parę kluczy
Podręcznik do zakończenia obu instancji 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}}'
Podsumowanie
Obecnie większość organizacji IT szuka czynników wyróżniających, aby zdobyć interesy i zaprezentować to samo swoim klientom. Powiedziałbym, że automatyzacja jest zdecydowanie jednym z kluczowych wyróżników.
Uważam, że dzięki narzędziom takim jak Ansible powinieneś być w stanie zautomatyzować większość powtarzalnych zadań ręcznych.
Zatem czego się z tego nauczyliśmy Trzyczęściowa seria samouczków Ansible przedstawia Ansible jako bardzo popularne i potężne narzędzie do zarządzania konfiguracją, które pomaga w różnych obszarach automatyzacji, od automatyzacji zadań, wdrażania aplikacji i udostępniania w chmurze. W związku z tym mówimy przede wszystkim o orkiestracji IT.
Mam nadzieję, że spodobał Ci się zakres samouczków Ansible i jestem pewien, że do tej pory zdobyłeś ogromną wiedzę na temat tej koncepcji.
Następnie nauczymy się, jak zintegrować Jenkins z Selenium, który jest również częścią naszej serii szkoleń DevOps.
POPRZEDNIA samouczek | NEXT Tutorial
rekomendowane lektury
- Samouczek Ansible: Instalacja i użytkowanie z modułami Ansible
- Ciągła integracja w DevOps
- Ciągłe dostarczanie w DevOps
- Integracja Jenkins z Selenium WebDriver: samouczek krok po kroku
- Co to jest testowanie integracji (samouczek z przykładem testowania integracji)
- Integracja Selenium z JMeter
- Automatyzacja zadań za pomocą Ansible Playbooks i Ansible Vaults z przykładami
- Ciągłe wdrażanie w DevOps