ansible roles integration with jenkins devops
Ansible Rollerine, Jenkins ile Entegrasyona ve Ansible S3 ve EC2 modüllerine derinlemesine bir bakış:
2. bölümde of Ansible eğitimleri serisi , Ans1ible oyun kitaplarının birden fazla görevi yürütmek ve tüm hedef makineleri veya sunucuları belirli bir istenen duruma getirmek için nasıl kullanıldığını öğrendik.
Önerilen Okuma => Üstel DevOps Eğitim Serisi
Ansible playbooks, esas olarak, modüler ve yeniden kullanılamayan tek bir büyük dosyada birden fazla görev içeren YAML dosyalarıdır. Ancak, tüm yapılandırmanızı parçalamanız ve daha modüler ve yeniden kullanılabilir olmanız gerekiyorsa, Ansible rolleri size çok yardımcı olacaktır.
Bu Ansible Eğitiminde , Ansible rollerine, DevOps bakış açısıyla sürekli teslimat için Ansible'ı Jenkins ile Entegre Et'e bakacağız ve en önemlisi AWS EC2 bulut sunucularının yönetilmesi için Ansible S3 ve EC2 modüllerine (EC2 bulut sunucuları Oluşturma ve Sonlandırma) bakacağız.
Ne öğreneceksin:
- Ansible Roller
- Ansible ile Jenkins Entegrasyonu
- Ansible ile AWS S3 Nesnelerini Yönetin
- Ansible kullanarak bir AWS EC2 örneği sağlayın
- EC2 Bulut Sunucularının Sonlandırılması
- Özet
- Önerilen Kaynaklar
Ansible Roller
Ansible rolleri ile, yeniden kullanılabilirliği artıran ve kesinlikle sözdizimi hatalarını azaltan değişkenlerinizi, görevlerinizi, işleyicilerinizi vb. Gruplayabilirsiniz. Tüm kodun dağınıklığını gidermeye yardımcı olur.
Ansible roller, Puppet'taki modüllere ve Chef'teki yemek kitaplarına benzer.
Rol oluşturmak için, cevapsız galaksi Oluşturmak için tüm şablonlara sahip olan komut.
Örnek Senaryo
Hayatımın büyük bir bölümünde DevOps uzmanıyım ve yalnızca CI ve CD'de çalışıyorum.
Dolayısıyla, J2EE uygulamamın (WAR dosyası) yeni bir yapısını tomcat'e dağıttığım Sürekli Teslimat'taki Örnek için adımlarım aşağıdaki gibi olacaktır:
- Uygulamayı durdurun
- Uygulamayı kaldırın
- Bir uygulamanın yeni yapısını dağıtın
- Uygulamayı başlatın
Bu yüzden en az 4 görev ve onu çağıran bir ana dosya içeren bir rol oluşturuyor olurdum. Bu şekilde kodumu daha modüler ve yeniden kullanılabilir hale getiriyorum. Öyleyse bu rolü şu şekilde adlandıralım: erkek kedi ve yaratın.
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
Rol oluşturulduktan sonra, oluşturduğu dizin yapısını görebilirsiniz.
Bu bölümde kullanacağımız ana bileşenler şunları içerir:
- görevler / main.yml - Bu, rol için oluşturulan görevlerin başlangıç noktasıdır. Diğer görev dosyalarına işaret etmek için main.yml dosyasını kullanabilirsiniz.
- kimin - Bu, kullanılan herhangi bir değişkeni tanımlamak içindir.
- meta - Bu, kendiniz veya yazar hakkındaki bilgileri tanımlamak içindir.
Adım 1: Tüm görevlerin ana listesini oluşturun
Düzenleyin görevler / main.yml dosyasını açın ve aşağıdaki kodu ekleyin. Yukarıda bahsedilen örnek senaryoya göre 4 farklı görev tanımlıyoruz. Çoğu durumda, dağıtım uygulaması da uygulamayı başlatır, bu nedenle başlangıç uygulamasının sonuncusu gerekli olmayabilir.
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
Adım 2: Senaryoya göre 4 dosyanın tamamını oluşturun
Aşağıdaki görevlerde eylem: ec2_facts uzak EC2 bulut sunucularından gerçekleri almak ve bunları oyunlarda / görevlerde çağırmak için kullanılır
görevler / stop_app.yml dosyası
--- - 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
görevler / 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
görevler / 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
Konuşlandırma kodunda, WAR dosyasını oluşturmak için JENKINS kullanılırsa, WAR dosyasının kaynak dizinini kopya modülü ve hedef, tomcat'in hedef sunucu web uygulamaları konumudur.
görev / 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
Adım 3: Değişkenleri Tanımlayın
Düzenleyin vars / main.yml dosyasını açın ve kodu aşağıda gösterildiği gibi ekleyin.
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
Adım 4: Meta klasöründeki bilgileri tanımlayın
Meta / main.yml dosyasını düzenleyin ve yazar, açıklama ve şirket gibi bilgilerinizi ekleyin.
deneyimli için java mülakat programları ve cevapları
galaxy_info: author: V Niranjan description: Devops specialist company:
Adım 5: Bir ana site.yml dosyası oluşturun
Son olarak, oluşturulan rolü çağırmak için ana site.yml dosyasını oluşturun ve bu da uygulamanın envanter dosyasına göre sunuculara veya ana bilgisayarların listesine dağıtılmasına yardımcı olur. Dosyayı şu şekilde oluşturun /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
Adım 6: site.yml playbook dosyasını çalıştırın
$ ansible-playbook site.yml
Uygulamanın konuşlandırılıp başlatılmadığını görmek için Tomcat URL'sini başlatın.
HTTP: //: portno / yönetici
Ansible ile Jenkins Entegrasyonu
Bu bölümde, Jenkins'in Ansible ile nasıl entegre edilebileceğini göreceğiz. Oluşturma işlemi kullanılarak oluşturulan WAR dosyası, Ansible kullanılarak hedef makinede Tomcat'e konuşlandırmak için kullanılacaktır. Ansible eklentisini kullanarak Jenkins'te önceki bölümde oluşturulan Ansible rolünü çağıracağız.
Bu nedenle, derleme tamamlandığında, WAR dosyasının dağıtımı Ansible kullanılarak otomatik olarak tetiklenecektir.
Bunu basit tutuyorum ve ayrıca yapılabilecek sürekli entegrasyon etkinlikleri sırasında Sonar veya Artifactory veya Junit'i yapılandırmadım.
Adım 1: Bir Jenkins işi oluşturun ve GitHub'daki kodu kullanarak SCM deposunu yapılandırın
2. Adım: Yapıyı yapılandırın
Adım 3: Jenkins çalışma alanında roller dizini oluşturun
Adım 4: Aşağıda gösterilen komutu kullanarak Jenkins çalışma alanı konumunda tomcat rolünü oluşturun
$ sudo ansible-galaxy init tomcat –çevrimdışı
Tüm dosyaları oluşturmak için önceki bölümde olduğu gibi prosedürü izleyin. görevler, vars, meta ve ana site.yml.
Windows'ta mkv dosyası nasıl açılır
Ana site.yml dosya oluşturuluyor / var / lib / Jenkins / çalışma alanı / dizin.
Adım 5: Ansible oynatma kitabını ve site.yml dosyasını çağırmak için Jenkins oluşturma sonrası adımını yapılandırın. İşi kaydedin.
Adım 6: Derleme işini tetikleyin ve uygulamanın doğru şekilde konuşlandırılıp dağıtılmadığını doğrulamak için Tomcat URL'sini başlatın.
Ansible ile AWS S3 Nesnelerini Yönetin
Ansible S3 modülü, bir S3 klasörüne veya bir S3 klasöründen dosya almak veya yerleştirmek için kullanılabilir. Bu modülü kullanmak için yüklememiz ve yapılandırmamız gerekecek oy AWS'ye erişmek için bir API (Uygulama programı arayüzü) görevi gören python modülü. Bu, Ansible kontrol makinesi.
Redhat Linux'ta
$ sudo yum install -y python python-dev python-pip
Ubuntu'da
$ apt-get install -y python python-dev python-pip
Yukarıdakiler yapıldıktan sonra boto kurun
$ sudo pip install boto boto3
Yükleyemiyorsanız, EPEL deposunu etkinleştirmeniz gerekecektir. Prosedür, yükleme bölümündeki makale dizisinin 1. bölümünde bulunabilir.
Yukarıdakiler yapıldıktan sonra, AWS kullanıcı kimlik bilgilerini de sağlamamız gerekir. AWS Access ve Secret Key ortam değişkenlerini dışa aktarabilirsiniz
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
Yukarıdaki ortam değişkenlerini ayarladıktan sonra bile kimlik bilgileri bulunamadığından bir hata alırsanız, aynı şeyi başucu kitabında da belirtebilirsiniz.
Şimdi Ansible'ı S3 kovalarıyla ve daha sonra örnekleri oluşturmak ve sonlandırmak için nasıl kullanacağınıza ilişkin bazı örneklere bakalım.
Örnek 1:Klasör içeren boş bir paket oluşturun
--- - 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
Not: Burada, paket oluşturmak için mod oluşturulur ve İzin, genel okuma veya genel okuma-yazma olabilir
Başucu kitabını çalıştırın ve içindeki geliştirme klasörüyle oluşturulan paketi görüntüleyin.
Örnek 2:Bir dosyayı S3 klasörüne kopyalamak (yüklemek) için
--- - 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
Buradaki nesne, paket içinde oluşturulan dosyadır. Bir dosya veya klasör olabilir. Bu durumda bir dosyadır. Kaynak, Ansible kontrol makinesi olan yerel makineden alınan dosyadır.
Not:Burada nesne yüklemek için mod koyulur
Başucu kitabını çalıştırın ve S3 kovasına bakın.
Örnek 3:Dosyayı S3 klasöründen alın (indirin)
--- - 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
Not:İşte mod indirme nesnesi için olsun
Örnek 4:S3 klasöründen bir nesne veya dosya silin
--- - 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
Not:Burada, nesneyi silmek için delobj modu
Örnek 5:Bir paketi ve tüm içeriği silin
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
Not:Burada mod, silme paketi için silinir
Ansible kullanarak bir AWS EC2 örneği sağlayın
Son olarak, sizi Ansible'ın en önemli özelliklerinden biri olan AWS EC2 bulut sunucusunu oluşturmak veya döndürmek ve ayrıca bulut sunucusunu nasıl sonlandırmakla baş başa bırakacağım. Tabii ki yüklemeyi unutma oy bu bir önkoşuldur ve ayrıca 'AWS_ACCESS_KEY_ID' ve 'AWS_SECRET_ACCESS_KEY' kullanıcısının dışa aktarılmasını sağlar.
Dışa aktarımın çalışmaması durumunda, aşağıda gösterilen koda aynısını eklediğinizden emin olun.
bir dizi ters sırada nasıl yazdırılır
Aşağıdaki kod, bir güvenlik grubu ve anahtar çifti oluşturmanın yanı sıra bir EC2 bulut sunucusunun nasıl oluşturulacağını gösterecektir.
- Bir güvenlik grubu oluşturun
- Anahtar çifti ve PEM dosyası oluşturun
- EC2 örneği oluştur
- EC2 örnek IP adresini yanıtlanabilir envanter dosyasına kaydedin
Bu alıştırmayı yapan kullanıcıların AWS EC2 kavramlarına hakim olduğunu varsayıyorum.
Aşağıdaki kodu bir dosyaya ekleyin ve AWS konsolunda EC2 bulut sunucusu oluşturmayı doğrulamak için aynısını çalıştırın. Kod büyük olduğu için 2 sayfaya bölünmüştür ancak hepsini tek bir yml dosyasına kaydettiğinizden emin olun.
--- - 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}}'
Başucu kitabını çalıştırın
/ etc / ansible / hosts envanter dosyası özel IP ile güncellendi
Örneğe giriş yapın
ssh -i 'vniranjan.pem' ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(Not:Büyütülmüş bir görünüm için aşağıdaki resme tıklayın)
Güvenlik Grubu oluşturuldu
Anahtar Çifti oluşturuldu
EC2 Bulut Sunucularının Sonlandırılması
Bu bölümde EC2 bulut sunucularının sonlandırılması hakkında daha fazla bilgi edinebilirsiniz.
Aşağıdaki ekranda çalışan 2 örnek olduğunu ve sonlandırma adımlarının aşağıdaki sırada olacağını görebilirsiniz:
- Bulut Sunucuları'nı kullanarak EC2 bulut sunucularını sonlandırın
- Güvenlik grubunu kaldır
- Anahtar çiftini kaldır
Her iki EC2 bulut sunucusunu da sonlandırmak için başucu kitabı
--- - 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}}'
Özet
Bugün, BT organizasyonlarının çoğu, iş kazanmak ve müşterilerine aynısını sergilemek için bir tür farklılaştırıcı arıyor. Otomasyonun kesinlikle anahtar farklılaştırıcılardan biri olduğunu söyleyebilirim.
Ansible gibi araçlarla, tekrar eden manuel görevlerin çoğunu otomatikleştirebilmeniz gerektiğine inanıyorum.
Böylece bundan ne öğrendik 3 bölümlü Ansible Eğitimi serisi Ansible'ı görev otomasyonu, uygulama dağıtımı ve bulut sağlama gibi farklı otomasyon alanlarında yardımcı olan çok popüler ve güçlü bir yapılandırma yönetimi aracı olarak sergiliyor. Bu nedenle, öncelikle BT düzenlemesinden bahsediyoruz.
Ansible öğreticilerinden keyif aldığınızı umuyoruz ve şimdiye kadar bu kavram hakkında çok fazla bilgi edinmiş olacağınıza eminim.
Daha sonra, DevOps eğitim serimizin bir parçası olan Selenium ile Jenkins'i nasıl entegre edeceğimizi öğreneceğiz.
PREV Eğitimi | SONRAKİ Eğitici
Önerilen Kaynaklar
- Ansible Eğitimi: Ansible Modülleri ile Kurulum ve Kullanım
- DevOps'ta Sürekli Entegrasyon
- DevOps'ta Sürekli Teslimat
- Jenkins'in Selenium WebDriver ile Entegrasyonu: Adım Adım Eğitim
- Entegrasyon Testi Nedir (Entegrasyon Testi Örneği ile Eğitim)
- Selenium'un JMeter ile entegrasyonu
- Ansible Başucu Kitaplarını ve Ansible Kasalarını Örneklerle Kullanan Görev Otomasyonu
- DevOps'ta Sürekli Dağıtım