Jenkins SSH 를 통해 구동할 war파일이 전달되면 build를 해줄 Dockerfile을 작성합니다.
Ansible의 대상이 될 인스턴스의 ip를 담고있는 hosts파일을 생성해 줍니다.
Ansible이 설치되어 있는 인스턴스로 이동하여 Ansible Playbook을 작성해줍니다.
앞에서 작성했던 Dockerfile로 넘어왔던 war파일을 build 해주는 Ansible Playbook입니다.
작성했던 Ansible Playbook yml 파일을 inventory 옵션에 hosts를 넣어 실행시켜 줍니다.
hosts에 등록했던 인스턴스로 이동하여 정상적으로 Docker가 build되고 실행이 됐는지 확인해줍니다.
그리고 적용할 Item으로 가셔서 '소스 코드 관리'-'빌드 후 조치'에 가셔서 실행 할 Ansible Play Book yml 파일을 실행해 줍니다.
젠킨스에서 정상적으로 배포가 된 것을 확인하고 해당 인스턴스로 돌아와 컨테이너를 확인해보면 정상적으로 배포가 된것을 확인할 수 있습니다.
같은 배포를 한번 더 해보시면 젠킨스에서 배포가 실패하는 것을 확인할 수 있습니다.
이유는 이미 Ansible Playbook에서 실행했던 컨테이너가 정상적으로 작동중이기 때문에
같은 컨테이너가 두개가 실행될 수 없기 때문에 오류가 발생한 것입니다.
Ansible Playbook yml 파일 tasks에 해당 컨테이너를 종료 후 다시 빌드하여 실행 해줌으로써 문제를 해결할 수 있습니다.
reference : 이도원 - Jenkins를 이용한 CI/CD Pipeline 구축