ansible roles integration with jenkins devops
Ansible Roles, जेनकिंस के साथ एकीकरण, और Ansible S3 और EC2 मॉड्यूल को गहराई से देखें:
भाग 2 में की आंनदनीय ट्यूटोरियल पर श्रृंखला , हमने सीखा कि कैसे Ans1ible प्लेबुक का उपयोग कई कार्यों को निष्पादित करने के लिए किया जाता है और किसी विशेष वांछित राज्य को सभी लक्ष्य मशीनें या सर्वर प्राप्त करने के लिए किया जाता है।
अनुशंसित पढ़ें => घातीय DevOps प्रशिक्षण श्रृंखला
Ansible playbooks मुख्य रूप से YAML फाइलें होती हैं जिनमें एक एकल विशाल फ़ाइल में कई कार्य होते हैं जो मॉड्यूलर और पुन: प्रयोज्य नहीं है। लेकिन अगर आपको अपने पूरे कॉन्फ़िगरेशन को तोड़ने और अधिक मॉड्यूलर और पुन: प्रयोज्य होने की आवश्यकता है तो Ansible भूमिकाएं बहुत मदद करेगी।
इस Ansible Tutorial में , हम एन्सिबल भूमिकाओं को देखेंगे, एक देवो के दृष्टिकोण से निरंतर वितरण के लिए जेनकिंस के साथ एंज़िबल को एकीकृत करें और सबसे महत्वपूर्ण रूप से एडब्ल्यूएस ईसी 2 उदाहरणों के प्रबंधन के लिए एंसिबल एस 3 और ईसी 2 मॉड्यूल को देखें (क्रिएट एंड टर्मिनेट ईसी 2 शेष)।
आप क्या सीखेंगे:
- अस्थिर रोल्स
- Jenkins एकीकरण के साथ एकता
- AWS S3 ऑब्जेक्ट्स को ऐंसेबल के साथ प्रबंधित करें
- Ansible का उपयोग करके AWS EC2 उदाहरण का प्रावधान करें
- EC2 उदाहरण समाप्त करना
- सारांश
- अनुशंसित पाठ
अस्थिर रोल्स
Ansible भूमिकाओं के साथ आप अपने चर, कार्यों, हैंडलर आदि को समूहित कर सकते हैं, जो पुन: प्रयोज्य को बढ़ाते हैं और सबसे निश्चित रूप से वाक्यविन्यास त्रुटियों को कम करते हैं। यह पूरे कोड को डी-क्लटर करने में मदद करता है।
चेफ़ में पुपेट और कुकबुक में मॉड्यूल की भूमिकाएँ समान हैं।
भूमिकाएँ बनाने के लिए, आप इसका उपयोग करते हैं ansible-galaxy कमांड जिसे बनाने के लिए सभी टेम्प्लेट हैं।
उदाहरण परिदृश्य
मैं अपने अधिकांश जीवन के लिए एक DevOps विशेषज्ञ रहा हूं और केवल CI और सीडी में काम कर रहा हूं।
उदाहरण के लिए कंटीन्यूअस डिलीवरी में जहां मैं अपने J2EE एप्लिकेशन (WAR फ़ाइल) के एक नए बिल्ड को टॉमक्रैट में तैनात कर रहा हूं, मेरे कदम इस प्रकार होंगे:
- आवेदन बंद करो
- एप्लिकेशन को अनइंस्टॉल करें
- किसी एप्लिकेशन के नए बिल्ड की तैनाती करें
- आवेदन शुरू करें
इसलिए मैं कम से कम 4 कार्यों और एक मुख्य फ़ाइल के साथ एक भूमिका बना रहा हूँ। इस तरह मैं अपने कोड को अधिक मॉड्यूलर और पुन: प्रयोज्य बना रहा हूं। तो इस भूमिका को इस रूप में कहते हैं बिल्ला और इसे बनाएँ।
$ 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
कार्य / तैनाती_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
तैनाती कोड में अगर JENKINS का उपयोग WAR फ़ाइल बनाने के लिए किया जाता है, तो आपको WB फाइल का स्रोत निर्देशिका प्रदान करना होगा प्रतिलिपि मॉड्यूल और डेस्टिनेशन टार्चैट का टारगेट सर्वर वेबैप्स लोकेशन है।
कार्य / 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: मेटा फ़ोल्डर में जानकारी को परिभाषित करें
मेटा / main.yml फ़ाइल को संपादित करें और लेखक, विवरण और कंपनी जैसी अपनी जानकारी जोड़ें।
सबसे अच्छा सॉफ्टवेयर ssd को हार्ड ड्राइव क्लोन करने के लिए
galaxy_info: author: V Niranjan description: Devops specialist company:
चरण 5: एक मुख्य site.yml फ़ाइल बनाएँ
अंत में, मुख्य साइट को बनाने के लिए फ़ाइल। भूमिका बनाने के लिए कॉल करें जो बदले में सर्वर पर एप्लिकेशन को तैनात करने में मदद करेगी या इन्वेंट्री फ़ाइल के अनुसार मेजबानों की सूची। फ़ाइल के रूप में बनाएँ /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
चरण 6: चलाएँ playbook फ़ाइल site.yml
$ ansible-playbook site.yml
यह देखने के लिए कि एप्लिकेशन को तैनात किया गया है और शुरू किया गया है, Tomcat URL लॉन्च करें।
HTTP: //: portno / manager
Jenkins एकीकरण के साथ एकता
इस खंड में, हम देखेंगे कि कैसे जेनकींस को अन्सिबल के साथ एकीकृत किया जा सकता है। बिल्ड प्रक्रिया का उपयोग करके बनाई गई WAR फ़ाइल का उपयोग एंसीबल का उपयोग करके लक्ष्य मशीन पर टॉमकैट को तैनात करने के लिए किया जाएगा। हम जेन्किंस में पिछले भाग में बनाई गई Ansible भूमिका को Ansible प्लगइन का उपयोग करके कॉल करेंगे।
एक बार निर्माण हो जाने के बाद WAR फ़ाइल की तैनाती स्वचालित रूप से Ansible का उपयोग करके चालू हो जाएगी।
मैं इसे सरल रख रहा हूं और निरंतर एकीकरण गतिविधियों के दौरान सोनार या आर्टिफैक्ट या जूनिट को कॉन्फ़िगर नहीं किया है जो कि भी किया जा सकता है।
चरण 1: जेनकिंस नौकरी बनाएँ और GitHub में कोड का उपयोग करके SCM रेपो कॉन्फ़िगर करें
चरण 2: बिल्ड को कॉन्फ़िगर करें
चरण 3: जेनकिंस कार्यक्षेत्र के भीतर भूमिका निर्देशिका बनाएं
चरण 4: नीचे दिखाए गए कमांड का उपयोग करके जेनकिन्स कार्यक्षेत्र स्थान में टॉमकैट भूमिका बनाएं
$ sudo ansible-galaxy init tomcat -offline
सभी फ़ाइलों को बनाने के लिए पिछले अनुभाग की तरह प्रक्रिया का पालन करें कार्य, vars, मेटा और मुख्य साइट .yml
.jnlp फ़ाइल क्या है
मुख्य site.yml फ़ाइल में बनाया गया है / var / lib / जेनकींस / कार्यक्षेत्र / निर्देशिका।
चरण 5: जेन्किंस पोस्ट-बिल्ड स्टेप को कॉन्फ़िगर करें। नौकरी बचाओ।
चरण 6: बिल्ड जॉब को ट्रिगर करें और यह सत्यापित करने के लिए टॉमकैट URL लॉन्च करें कि क्या एप्लिकेशन सही तरीके से तैनात है।
AWS S3 ऑब्जेक्ट्स को ऐंसेबल के साथ प्रबंधित करें
Ans3 S3 मॉड्यूल का उपयोग या फाइल को S3 बाल्टी से प्राप्त करने या करने के लिए किया जा सकता है। इस मॉड्यूल का उपयोग करने के लिए हमें स्थापित करने और कॉन्फ़िगर करने की आवश्यकता होगी वोट अजगर का मॉड्यूल जो एडब्ल्यूएस तक पहुंचने के लिए एपीआई (एप्लिकेशन प्रोग्राम इंटरफ़ेस) के रूप में कार्य करता है। इस पर स्थापित किया जाना है अस्थिर नियंत्रण मशीन।
रेडहैट लिनक्स पर
$ sudo yum install -y python python-dev python-pip
उबंटू पर
$ apt-get install -y python python-dev python-pip
एक बार जब ऊपर स्थापित किया जाता है तो बोटो स्थापित करें
$ sudo pip install boto boto3
यदि आप इंस्टॉल नहीं कर पा रहे हैं तो आपको EPEL रेपो को सक्षम करना होगा। प्रक्रिया स्थापित करने योग्य अनुभाग में आलेख श्रृंखला के भाग 1 में पाई जा सकती है।
एक बार ऊपर हो जाने के बाद हमें AWS उपयोगकर्ता क्रेडेंशियल्स भी प्रदान करना होगा। आप AWS एक्सेस और सीक्रेट की एनवायरनमेंट वैरिएबल एक्सपोर्ट कर सकते हैं
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
यदि उपरोक्त पर्यावरण चर सेट करने के बाद भी आपको कोई त्रुटि मिलती है, जैसा कि क्रेडेंशियल नहीं मिला, तो आप प्लेबुक में भी इसे निर्दिष्ट कर सकते हैं।
आइए अब कुछ उदाहरणों पर गौर करें कि कैसे एस 3 बाल्टी के साथ एंसेबल का उपयोग किया जाए और बाद में इंस्टेंसेस बनाने और समाप्त करने के लिए।
उदाहरण 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
ध्यान दें:यहाँ डाउनलोड ऑब्जेक्ट के लिए मोड मिलता है
उदाहरण 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
ध्यान दें:यहाँ मोड डिलीट ऑब्जेक्ट के लिए डेलोबज है
उदाहरण 5:एक बाल्टी और सभी सामग्री को हटा दें
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
ध्यान दें:यहां डिलीट बकेट के लिए मोड डिलीट है
Ansible का उपयोग करके AWS EC2 उदाहरण का प्रावधान करें
अंत में, मैं आपको अन्सिबल की सबसे महत्वपूर्ण विशेषताओं में से एक के साथ छोड़ दूंगा जो एडब्ल्यूएस ईसी 2 उदाहरण को बनाने या स्पिन करने के लिए है और उदाहरण को समाप्त करने का तरीका भी। बेशक, स्थापित करने के लिए मत भूलना वोट जो एक पूर्व-आवश्यकता है और 'AWS_ACCESS_KEY_ID' और 'AWS_SECRET_ACCESS_KEY' उपयोगकर्ता को निर्यात करना भी सुनिश्चित करता है।
यदि निर्यात काम नहीं करता है तो कोड में समान जोड़ने के लिए सुनिश्चित करें कि नीचे दिखाया गया है।
विंडोज़ के लिए सबसे अच्छा आभासी मशीन सॉफ्टवेयर
नीचे दिया गया कोड आपको दिखाएगा कि सुरक्षा समूह और कुंजी जोड़ी बनाने के साथ-साथ EC2 उदाहरण कैसे बनाया जाए।
- एक सुरक्षा समूह बनाएँ
- कुंजी जोड़ी और पीईएम फ़ाइल बनाएँ
- EC2 उदाहरण बनाएँ
- EC2 इंस्टेंस IP पते को सेव इनवेंट्री फ़ाइल में सहेजें
मैं यह मान रहा हूं कि इस अभ्यास को करने वाले उपयोगकर्ता AWS EC2 अवधारणाओं से अच्छी तरह वाकिफ हैं।
एक फ़ाइल के नीचे कोड जोड़ें और AWS कंसोल में EC2 इंस्टेंस निर्माण को सत्यापित करने के लिए समान चलाएं। जैसे ही कोड बड़ा होता है, इसे 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 / होस्ट इन्वेंट्री फ़ाइल अपडेट की गई
उदाहरण के लिए लॉगिन करें
ssh -i 'vniranjan.pem' ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
()ध्यान दें:एक विस्तृत दृश्य के लिए नीचे की छवि पर क्लिक करें)
सुरक्षा समूह बनाया गया
कुंजी जोड़ी बनाई गई
EC2 उदाहरण समाप्त करना
इस खंड में EC2 उदाहरणों को समाप्त करने के बारे में अधिक जानें।
निम्नलिखित स्क्रीन में आप देख सकते हैं कि 2 इंस्टेंस चल रहे हैं और समाप्त करने के चरण निम्नलिखित क्रम में होंगे:
- इंस्टा आईडी का उपयोग करके EC2 उदाहरणों को समाप्त करें
- सुरक्षा समूह निकालें
- कुंजी जोड़ी निकालें
दोनों 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 ट्यूटोरियल श्रृंखला एक बहुत ही लोकप्रिय और शक्तिशाली कॉन्फ़िगरेशन प्रबंधन उपकरण के रूप में Ansible को दिखाता है जो कार्य स्वचालन, अनुप्रयोग परिनियोजन और क्लाउड प्रोविज़निंग से स्वचालन के विभिन्न क्षेत्रों में मदद करता है। इस प्रकार, हम मुख्य रूप से आईटी ऑर्केस्ट्रेशन के बारे में बात कर रहे हैं।
आशा है कि आपने Ansible ट्यूटोरियल्स की रेंज का आनंद लिया होगा और मुझे यकीन है कि आपने अब तक अवधारणा पर बहुत ज्ञान प्राप्त कर लिया होगा।
इसके बाद, हम सीखेंगे कि जेनकिंस को सेलेनियम के साथ कैसे एकीकृत किया जाए जो कि हमारी DevOps प्रशिक्षण श्रृंखला का एक हिस्सा है।
PREV ट्यूटोरियल | अगले ट्यूटोरियल
अनुशंसित पाठ
- उत्तर देने योग्य ट्यूटोरियल: स्थापना और उपयोग के साथ उपयोग करने योग्य मॉड्यूल
- DevOps में निरंतर एकीकरण
- DevOps में सतत वितरण
- सेलेनियम वेबड्राइवर के साथ जेनकिंस का एकीकरण: चरण-दर-चरण ट्यूटोरियल
- एकीकरण परीक्षण क्या है (एकीकरण परीक्षण उदाहरण के साथ ट्यूटोरियल)
- जेमीटर के साथ सेलेनियम का एकीकरण
- टास्क ऑटोमेशन का उपयोग उदाहरणों के साथ एंज़िबल प्लेबुक और अन्सिबल वाल्ट का उपयोग करना
- DevOps में निरंतर तैनाती