[Jenkins] Ansible Playbook 사용

2024. 7. 30. 16:11·Infra/Jenkins

 

이전 글

이전 포스팅에서 우리는 Ansible의 기본 명령어인 -m 옵션을 활용해서 여러 모듈을 사용했다.

하지만, 실제로는 -m 옵션을 주기보다는 Ansible Playbook를 사용한다.

이번 포스팅에서는 Ansible Playbook이 무엇이고 어떻게 활용하는지에 관해 알아본다. 

 

 

Ansible Playbook

Ansible Playbook은 사용자가 원하는 파일을 미리 작성해 놓은 파일을 말한다.

즉, 우리가 앞서 모듈을 통해 한 줄씩 실행했던 것을 모아서 미리 파일을 만들어놓는 것이다.

 

ex) 설치, 파일 전송, 서비스 재시작...

ex) 다수의 서버에 반복 작업을 처리하는 경우

 

우리는 Ansible에서 제공하는 playbook을 통해 여러 작업이 가능하다.

 

 

Ansible Playbook 예제 프로그램

 

---
- name: Add an ansible hosts
  hosts: localhost
  tasks:
    - name: Add an ansible hosts
      blockinfile:
        path: /etc/ansible/hosts
        block: |
          [mygroup]
          172.17.0.5
  • name: Ansible Playbook의 이름을 정한다.
  • hosts: 작성한 Playbook이 적용될 그룹 및 IP를 입력한다.
  • tasks: Playbook에서 이루어질 작업들을 작성하는 곳이다. (위의 예시에서는 한 가지 작업만이 존재)
    • name: 작업의 이름을 정한다.
    • blockinfile: 파일에 특정 block을 추가하는 작업을 한다.

 

Ansible Playbook 실행

 

ansible-playbook first-playbook.yml

 

 

실제로 vi /etc/ansible/hosts로 접근하면 아래와 같이 추가된 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

당연하게도 ansible-playbook 명령어 지정시 -i 옵션을 사용해서 개별 hosts를 선택할 수도 있다.

 

위 처럼 우리는 ansible-playbook를 사용하면 Ansible를 활용하여 여러 호스트에 쉽게 다양한 작업들을 명령할 수 있다.

 

근데 여기서 중요한 점이 하나있다.

 

우리는 이전 포스트에서 Ansible은 멱등성의 특징이 있다고 했다.

그렇다면 위의 Playbook을 한번더 실행하면 어떻게 될까?

 

 

Ansible이 갖는 멱등성에 의해 반복 작업에도 추가되지 않은 것을 확인할 수 있다.

 

 

다른 예시를 한개 더 알아보자.

 


 

 

Ansible Playbook를 활용하여 Tomcat 서버 설치

---
- name: Download Tomcat9 from tomcat.apache.org
  hosts: devops
  tasks:
   - name: Create a Directory /opt/tomcat9
     file:
       path: /opt/tomcat9
       state: directory
       mode: 0755
   - name: Download Tomcat using get_url
     get_url:
       url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz
       dest: /opt/tomcat9
       mode: 0755
       checksum: sha512:https://downloads.apache.org/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz.sha512

 

  • https://tomcat.apache.org/download-90.cgi      <- 최신 버전 확인
  • name: Playbook의 이름
  • hosts: devops 그룹을 지정한다.
  • tasks: 실행할 작업들
    • 작업1: /opt/tomcat9 경로에 디렉토리를 하나 생성한다.
      • 권한은 0755이다.
    • 작업2: Tomcat 파일을 get_url 모듈을 사용해서 다운로드 받아온다.

 

Ansible Playbook 실행

ansible-playbook {Playbook 이름}

 

 

정상적으로 Tomcat 파일이 다운로드 되어 Playbook이 실행되는 것을 확인할 수 있다.

 

 


 

정리 

우리는 이번 포스팅에서 -m 옵션으로 모듈을 지정하는 방법대신 Playbook을 활용해서 호스트에게 일련의 작업을 시켰다.

Playbook을 활용하면 일일이 스크립트 코드를 작성하는 것이 아닌 저장되어 있는 Playbook를 사용하기만 하면 된다.

 

그래서, 우리는 다음 포스팅에서 이 Playbook을 활용하여 Jenkins에서 Ansible 서버로 명령을 내리는 것으로

Jenkins를 활용해 여러 호스트들을 조작해볼 것이다.

 

 

참고

이도원 강사님의 Jenkins 강의

저작자표시 비영리 변경금지 (새창열림)

'Infra > Jenkins' 카테고리의 다른 글

[Jenkins] Jenkins의 여러 Pipeline 작업  (0) 2024.07.31
[Jenkins] Jenkins + Ansible 연동하기  (0) 2024.07.31
[Jenkins] Ansible 기본 명령어  (1) 2024.07.30
[Jenkins] Docker 컨테이너로 Ansible 실행하기  (0) 2024.07.21
[Jenkins] IaC와 Ansible이란?  (0) 2024.07.20
'Infra/Jenkins' 카테고리의 다른 글
  • [Jenkins] Jenkins의 여러 Pipeline 작업
  • [Jenkins] Jenkins + Ansible 연동하기
  • [Jenkins] Ansible 기본 명령어
  • [Jenkins] Docker 컨테이너로 Ansible 실행하기
진꿈청
진꿈청
기록하는 개발자가 되기를 희망하는 진꿈청입니다. 사소한 개발 일지도 기록하기 위해 노력하겠습니다
  • 진꿈청
    기록형 개발자 희망
    진꿈청
  • 전체
    오늘
    어제
    • 분류 전체보기 (379)
      • 개발 기록 (140)
      • Language (12)
        • Java (4)
        • Python (0)
        • Kotlin (8)
      • Spring (51)
        • JPA (9)
        • AOP (1)
        • Batch (1)
        • Cloud (4)
        • WebSocket (11)
        • 유용한 정보 (9)
        • 동시성 & Lock (7)
        • Test (7)
      • DevOps (3)
        • AWS (3)
      • Docker (7)
      • Git (1)
      • PS (53)
        • 프로그래머스 (16)
        • 백준 (36)
        • goorm (1)
      • 프로젝트 (39)
        • 토이 프로젝트 (9)
        • FitTrip (16)
        • StudyWithMe (14)
      • Ceph (3)
      • CS (10)
        • Network (6)
        • OS (4)
      • Design Pattern (8)
      • Infra (40)
        • Jenkins (13)
        • DevOps (7)
        • Kubernetes (10)
        • NGINX (4)
        • Flyway (1)
        • Kafka (1)
      • DB (7)
        • Redis (5)
        • MongoDB (1)
        • PostgreSQL (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JPA
    Kafka
    Design Pattern
    프로그래머스
    Redis
    ApplicationEventPublisher
    @Transactional
    Spring Cloud Gateway
    Spring
    Kubernetes
    Jenkins
    k8s
    docker
    openfeign
    nginx
    Spring JPA
    Github Actions
    flyway
    Spring cloud
    springboot
    websocket
    김영한
    백준
    디자인 패턴
    kotlin
    java
    fittrip
    ansible
    AWS EC2
    spring rest docs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진꿈청
[Jenkins] Ansible Playbook 사용
상단으로

티스토리툴바