Ansible - Jenkins 연동하여 배포하기(Docker 연속 배포 문제 해결)

salgu·2022년 12월 18일
0

ansible

목록 보기
3/4
post-thumbnail

Ansible Server 세팅


Dockerfile 작성

Jenkins SSH 를 통해 구동할 war파일이 전달되면 build를 해줄 Dockerfile을 작성합니다.

hosts 파일 작성

Ansible의 대상이 될 인스턴스의 ip를 담고있는 hosts파일을 생성해 줍니다.

Ansible Playbook 작성

Ansible이 설치되어 있는 인스턴스로 이동하여 Ansible Playbook을 작성해줍니다.
앞에서 작성했던 Dockerfile로 넘어왔던 war파일을 build 해주는 Ansible Playbook입니다.

Ansible Playbook 실행 테스트

작성했던 Ansible Playbook yml 파일을 inventory 옵션에 hosts를 넣어 실행시켜 줍니다.

Docker build 확인

hosts에 등록했던 인스턴스로 이동하여 정상적으로 Docker가 build되고 실행이 됐는지 확인해줍니다.




Jenkins 연동


Jenkins-Ansible 연동

그리고 적용할 Item으로 가셔서 '소스 코드 관리'-'빌드 후 조치'에 가셔서 실행 할 Ansible Play Book yml 파일을 실행해 줍니다.

배포 확인

젠킨스에서 정상적으로 배포가 된 것을 확인하고 해당 인스턴스로 돌아와 컨테이너를 확인해보면 정상적으로 배포가 된것을 확인할 수 있습니다.




문제점


문제

같은 배포를 한번 더 해보시면 젠킨스에서 배포가 실패하는 것을 확인할 수 있습니다.
이유는 이미 Ansible Playbook에서 실행했던 컨테이너가 정상적으로 작동중이기 때문에
같은 컨테이너가 두개가 실행될 수 없기 때문에 오류가 발생한 것입니다.

해결

Ansible Playbook yml 파일 tasks에 해당 컨테이너를 종료 후 다시 빌드하여 실행 해줌으로써 문제를 해결할 수 있습니다.





reference : 이도원 - Jenkins를 이용한 CI/CD Pipeline 구축

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

0개의 댓글