Jenkins + Playbook 연동하기
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가 과정을 자동화할 수 있도록 마무리한다.