
젠킨스 서버에서, 엔서블 서버로 접속하는 방법


test success 뜨면 완료
기존에는 Git에서 코드 가져오면 Jenkins에서 Maven build 하고, 그걸 Docker-server에 ssh로 복사한 다음에 그 도커서버에서 실행하곤 했다. 하지만 n번 이 작업을 실행하면 오류가 발생한다
젠킨스에서 도커에 직접 배포가 아닌, ansible로 배포해보자
git(code) -> Jenkins(Maven build) -> Ansible -> target(dockerserver) -> 실행
docker 서버는 초기화하고 다시하자

젠킨스에서 만든 결과물 SSH를 통해서 전송하겠다는 것
엔서블 서버에 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
엔서블 서버에, Dockerfile 및 playbook 필요

엔서블 서버에 있는 hello-world.war 파일을, 톰캣서버 webapps에 복사하는 작업을 가진 도커파일이다

위 플레이북에 있는 이미지 설치할 hosts도 설정(저 주소는 ansible 주소다)

엔서블 서버의 도커이미지가 비어있었는데, 플레이북 실행하니 만들어졌다
- hosts: all
# become: true
tasks:
- name: build a docker image with deployed war file
command: docker build -t cicd-project-ansible .
args:
chdir: /root
- name: create a container using cicd-project-ansible image
command: docker run -d --name my_cicd_project -p 8080:8080 cicd-project-ansible



이미지는 실행 전 만들어진 이미지 그대로 있고, 도커 컨테이너는 새로 생성된게 보인다

(엔서블 서버 이미지, 컨테이너 다 지우고 빌드 시작)

빌드 완료

이미지, 컨테이너 다 생성된 모습

로컬호스트로 접속해서, hello world 잘 되는거 확인 가능

POLL SCM 설정

소스코드 수정

깃 데스크탑에서, commit하고 push까지 한다

오류가 난다 -> 왜?

이미지의 경우 새로 만들어졌지만, 컨테이너는 이전 실습을 진행하며 생겼던 컨테이너가 아직 존재
도커의 경우, 같은 이름의 컨테이너를 만들 수 없다! 기존에 같은 이름 컨테이너 가진게 있어서 오류 생긴것 -> 기존에 있던 컨테이너가 있다면 삭제하는 작업을 추가해야함
- hosts: all
# become: true
tasks:
- name: stop current running container
command: docker stop my_cicd_project
ignore_errors: yes
- name: remove stopped cotainer
command: docker rm my_cicd_project
ignore_errors: yes
- name: remove current docker image
command: docker rmi cicd-project-ansible
ignore_errors: yes
- name: build a docker image with deployed war file
command: docker build -t cicd-project-ansible .
args:
chdir: /root
- name: create a container using cicd-project-ansible image
command: docker run -d --name my_cicd_project -p 8080:8080 cicd-project-ansible
컨테이너 중지, 삭제, 이미지 모두 삭제하는 과정 추가해놓았음
안 해도 된다면(이미지나 컨테이너가 존재하지 않는다면, 에러 발생했을 때 그냥 무시하게 설정)


잘 된 모습