Devops/Devops

Jenkins + Playbook 연동하기

ellapk 2024. 10. 18. 13:10

 

Jenkins에서 ansible을 통해

기존에 도커에서 기동되는 컨테이너가 있을 경우에

중지하거나 여러번 실행해도, 지속적으로 작업이 가능하도록 deployment를 관리하자.

순차적 단계를 자동화 시켜야하므로, ansible-playbook을 활용한다.

 

 

 

오늘 실습은 playbook을 통해 이미지 및 컨테이너 빌드가 제대로 이루어지는 지 확인한 후,

임시로 생성한 이미지와 컨테이너를 지운 후

모든게 확인이 되면 Jenkins에 추가하는 순서로 이루어진다.

 

 

 

 

playbook 만들기

 

 

ansible 컨테이너에서 war 파일로 도커 이미지를 생성하는

playbook 파일을 생성한다.

 

- hosts: all
#   become: true  

  tasks:
  - name: build a docker image with deployed war file
    command: docker build -t cicd-project-ansible .
    args: 
        chdir: /root

 

 

잘 추가된 것을 확인할 수 있다.

 

 

파일 확인

 

 

꼭 확인해야 하는 파일은

 

1. war파일 (이미지 빌드 및 배포 대상)

2. Dockerfile(도커 이미지 빌드 지시를 위한 스크립트)

3. playbook.yml (자동화를 위한 스크립트)

 

세가지이다. 모두 정상적으로 존재함을 확인한 후,

 

 

루트 디렉토리에서

 

 

 

Playbook 실행 (= 이미지 생성)

 

Ansible playbook을 실행시킨다.

 

 

 

이미지가 생성된 것을 확인.

 

 

 

 

컨테이너 실행

이제 생성된 이미지로 컨테이너를 생성하자

아까 생성한 playbook.yml 파일 하단에, 명령어를 추가한다.

  - name: create a container using cicd-project-ansible image
    command: docker run -d --name my_cicd_project -p 8080:8080 cicd-project-ansible

 

 

 

다시 playbook 실행 시 제대로 container가 생성되는 것을 확인할 수 있다.

 

 

docker rmi {이미지 ID 혹은 이름}
docker rm {컨테이너 ID 혹은 이름}

 

모든 절차 확인이 끝났으므로, 초반에 설명한 것과 같이 임시로 생성한 이미지와 컨테이너를 삭제한다.

 

 

 

 

Jenkins에 정식 추가

 

 

마지막 Exec command에

ansible-playbook -i hosts first-devops-playbook.yml

 

을 추가해서 Jenkins가 과정을 자동화할 수 있도록 마무리한다.