ansible roles integration with jenkins devops
Ansible 역할, Jenkins와의 통합, Ansible S3 및 EC2 모듈에 대해 자세히 살펴 봅니다.
2 부 의 Ansible 튜토리얼 시리즈 , Ans1ible 플레이 북을 사용하여 여러 작업을 실행하고 모든 대상 컴퓨터 또는 서버를 특정 원하는 상태로 만드는 방법을 배웠습니다.
추천 읽기 => Exponential DevOps 교육 시리즈
Ansible 플레이 북은 주로 모듈식이 아니고 재사용 할 수없는 하나의 거대한 파일에 여러 작업을 포함하는 YAML 파일입니다. 그러나 전체 구성을 분리하고 더 모듈화되고 재사용 가능해야하는 경우 Ansible 역할이 많은 도움이 될 것입니다.
이 Ansible 튜토리얼에서 , 우리는 DevOps 관점에서 지속적 제공을 위해 Ansible 역할, Jenkins와 Ansible 통합을 살펴보고 가장 중요한 것은 AWS EC2 인스턴스를 관리하기위한 Ansible S3 및 EC2 모듈 (EC2 인스턴스 생성 및 종료)을 살펴 봅니다.
학습 내용 :
- Ansible 역할
- Ansible과 Jenkins 통합
- Ansible로 AWS S3 객체 관리
- Ansible을 사용하여 AWS EC2 인스턴스 프로비저닝
- EC2 인스턴스 종료
- 요약
- 추천 도서
Ansible 역할
Ansible 역할을 사용하면 변수, 작업, 처리기 등을 그룹화하여 재사용 성을 높이고 구문 오류를 가장 확실하게 줄일 수 있습니다. 전체 코드를 정리하는 데 도움이됩니다.
Ansible 역할은 Puppet의 모듈 및 Chef의 쿡북과 유사합니다.
역할을 생성하려면 ansible-galaxy 생성 할 모든 템플릿이있는 명령입니다.
예제 시나리오
저는 평생 동안 DevOps 전문가였으며 CI와 CD에서만 일했습니다.
따라서 Tomcat에 J2EE 응용 프로그램 (WAR 파일)의 새 빌드를 배포하는 Continuous Delivery의 예의 경우 단계는 다음과 같습니다.
- 응용 프로그램 중지
- 응용 프로그램 제거
- 애플리케이션의 새 빌드 배포
- 응용 프로그램 시작
그래서 적어도 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
작업 / 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
배포 코드에서 JENKINS를 사용하여 WAR 파일을 빌드하는 경우 WAR 파일의 소스 디렉토리를 부 모듈 및 대상은 tomcat의 대상 서버 webapps 위치입니다.
작업 / 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 파일을 편집하고 작성자, 설명 및 회사와 같은 정보를 추가하십시오.
빌드 자동화 중에 버그를 잡는 방법
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 단계 : 플레이 북 파일 site.yml 실행
$ ansible-playbook site.yml
Tomcat URL을 실행하여 애플리케이션이 배포 및 시작되었는지 확인합니다.
HTTP : // : portno / manager
Ansible과 Jenkins 통합
이 섹션에서는 Jenkins를 Ansible과 통합하는 방법을 살펴 봅니다. 빌드 프로세스를 사용하여 빌드 된 WAR 파일은 Ansible을 사용하여 대상 머신의 Tomcat에 배포하는 데 사용됩니다. Ansible 플러그인을 사용하여 Jenkins의 이전 섹션에서 생성 된 Ansible 역할을 호출합니다.
따라서 빌드가 완료되면 Ansible을 사용하여 WAR 파일 배포가 자동으로 트리거됩니다.
나는 이것을 단순하게 유지하고 있으며 또한 수행 할 수있는 지속적인 통합 활동 중에 Sonar, Artifactory 또는 Junit을 구성하지 않았습니다.
1 단계 : Jenkins 작업 생성 및 GitHub의 코드를 사용하여 SCM 리포지토리 구성
2 단계 : 빌드 구성
3 단계 : Jenkins 작업 영역 내에 역할 디렉터리 만들기
4 단계 : 아래 표시된 명령을 사용하여 Jenkins 작업 영역 위치에 tomcat 역할을 만듭니다.
$ sudo ansible-galaxy init tomcat –offline
이전 섹션의 절차를 따라 모든 파일을 만듭니다. 작업, vars, 메타 및 기본 site.yml.
안드로이드 용 좋은 음악 다운로더는 무엇입니까
메인 site.yml 파일이 생성됩니다 / var / lib / Jenkins / workspace / 예배 규칙서.
5 단계 : Ansible 플레이 북을 호출하고 site.yml 파일을 호출하도록 Jenkins 빌드 후 단계를 구성합니다. 작업을 저장하십시오.
6 단계 : 빌드 작업을 트리거하고 Tomcat URL을 시작하여 애플리케이션이 올바르게 배포되었는지 확인합니다.
Ansible로 AWS S3 객체 관리
Ansible S3 모듈을 사용하여 S3 버킷에서 파일을 가져 오거나 넣을 수 있습니다. 이 모듈을 사용하려면 설치하고 구성해야합니다. 투표 AWS에 액세스하기위한 API (Application Program Interface) 역할을하는 Python 모듈입니다. 이것은에 설치되어야합니다 Ansible 제어 기계.
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 저장소를 활성화해야합니다. 이 절차는 ansible 설치 섹션의 기사 시리즈 1 부에서 찾을 수 있습니다.
위의 작업이 완료되면 AWS 사용자 자격 증명도 제공해야합니다. AWS 액세스 및 비밀 키 환경 변수를 내보낼 수 있습니다.
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
위의 환경 변수를 설정 한 후에도 자격 증명을 찾을 수 없어 오류가 발생하는 경우 플레이 북에서 동일하게 지정할 수도 있습니다.
이제 S3 버킷과 함께 Ansible을 사용하여 인스턴스를 생성하고 종료하는 방법에 대한 몇 가지 예를 살펴 보겠습니다.
예 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
노트 :여기서 모드는 객체 삭제를위한 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 인스턴스 프로비저닝
마지막으로, Ansible의 가장 중요한 기능 중 하나는 AWS EC2 인스턴스를 생성 또는 가동하고 인스턴스를 종료하는 방법을 알려 드리겠습니다. 물론 설치하는 것을 잊지 마십시오 투표 이는 전제 조건이며 사용자“AWS_ACCESS_KEY_ID”및“AWS_SECRET_ACCESS_KEY”를 내 보내야합니다.
내보내기가 작동하지 않는 경우 아래 표시된 것과 같이 코드에 동일한 내용을 추가하십시오.
기능 테스트는 무엇입니까?
아래 코드는 보안 그룹 및 키 페어 생성과 함께 EC2 인스턴스를 생성하는 방법을 보여줍니다.
- 보안 그룹 생성
- 키 쌍 및 PEM 파일 만들기
- EC2 인스턴스 생성
- ansible 인벤토리 파일에 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 / hosts 인벤토리 파일이 개인 IP로 업데이트 됨
인스턴스에 로그인
ssh -i“vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
(노트 :크게 보려면 아래 이미지를 클릭하십시오)
보안 그룹이 생성되었습니다.
생성 된 키 쌍
EC2 인스턴스 종료
이 섹션에서는 EC2 인스턴스 종료에 대해 자세히 알아 봅니다.
다음 화면에서 2 개의 인스턴스가 실행 중이고 종료 단계는 다음 순서임을 알 수 있습니다.
- 인스턴스 ID를 사용하여 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}}'
요약
오늘날 대부분의 IT 조직은 비즈니스를 성공시키고 고객에게 동일한 것을 보여주기 위해 어떤 종류의 차별화 요소를 찾고 있습니다. 자동화는 확실히 주요 차별화 요소 중 하나입니다.
Ansible과 같은 도구를 사용하면 대부분의 반복적 인 수동 작업을 자동화 할 수 있어야한다고 생각합니다.
따라서 우리가 이것에서 배운 것은 3 부로 구성된 Ansible 튜토리얼 시리즈 Ansible은 작업 자동화, 애플리케이션 배포 및 클라우드 프로비저닝에 이르는 다양한 자동화 영역에서 도움이되는 매우 인기 있고 강력한 구성 관리 도구로 소개됩니다. 따라서 우리는 주로 IT 오케스트레이션에 대해 이야기하고 있습니다.
다양한 Ansible 튜토리얼을 즐기 셨기를 바라며 지금 쯤이면 개념에 대한 엄청난 지식을 얻었을 것입니다.
다음으로 Jenkins를 DevOps 교육 시리즈의 일부인 Selenium과 통합하는 방법을 배웁니다.