DevOps

Jenkins + Docker + Tomcat을 통한 외부서버에 빌드 및 배포

lsh2613 2023. 7. 27. 00:42

따로 외부서버가 존재하지 않으므로 도커를 이용하여 SSH+Tomcat을 통해 외부 서버에 빌드 및 배포하는 과정을 진징해 보았다.

 

먼저 Docker+SSH+Tomcat은 인프런 - Dowon Lee 강사님의 교육용 이미지를 사용하였다.

https://hub.docker.com/r/edowon0623/docker

 

Docker

 

hub.docker.com

 

SSH를 통해 배포해야 하기 때문에 해당 플러그인도 설치를 해준다.

Item 생성

Maven 프로젝트의 깃허브 연동 등은 생략

빌드

코드를 가져와 기존에 빌드된 파일이 있으면 제거하고 재컴파일 하여 다시 빌드를 수행하는 Goal을 지정해준다.

 

빌드 후 조치

빌드된 파일을 외부 서버에 전송하기 위해 위에서 설치한 플러그인 Send build artifacts over SSH를 통해 전송하고자 하는 외부 서버를 선택해준다. 본인는 docker-server에 전송할 것이고 사전에 Jenkins 관리에서 SSH를 설정해야 한다.

기본적으로 jenkins를 통해 코드를 가져와 빌드하면 /var/jenkins_home/프로젝트명/target/*.war 경로에 생성된다.

여기서 전송할 파일을 Source files에, 사전에 삭제할 경로를 Remove prefix에, 루트 경로를 Remote directory에 지정해준다.

전송할 파일이 하나여서 *.war로 지정해줬지만 정확한 파일 명을 입력해주면 좋다.

경로를 타고 들어가 war파일을 지정해주기 위해 target/*.war로 선언하고 그대로 복사가 되지만 외부서버에는 *.war만 전송하고 싶다면 Remove prefix에 target을 넣어 *.war만 전송하게 해준다. 그리고 해당 파일은 Remote directory에 저장하게 되는데 . 을 통해 루트 디렉토리에 저장하였다.

 

마지막으로 해당 war 파일과 톰캣을 합쳐 이미지를 만들고 배포 해주기 위해 command 를 입력해준다.

이미지를 생성하기 위한 Dockerfile을 미리 만들어두었고 이름은 cicd-project로 만들고 만든 이미지를 바로 실행시키는 명령어다.

 

Dockerfile은 다음과 같다.

tomcat:9.0 이미지를 사용하였고 위에서 설정한 루트 디렉토리에 저장한 war파일을 톰캣에 배포하기 위한 톰캣 경로에 복사했다.

docker build --tag=cicd-project -f Dockerfile .;

이제 이 파일로 빌드를 진행하면 tomcat9.0 버전과 webapps에 복사한 war파일을 가지고 이미지를 생성한다.

LABEL을 통해 메타데이터를 추가해주었다. 별 의미는 없다.

 

docker run -d -p 8080:8080 --name mytomcat cicd-project

위에서 생성한 이미지를 사용하여 mytomcat이라는 컨테이너를 실행시킨다. 포트는 8080:8080으로 포워딩 시켰다.

 

빌드를 실행시켜보자.

빌드

빌드를 실행시키면 war파일이 잘 복사되어 있고 images의 cicd-project와 container의 mytomcat을 확인해볼 수 있다.

 

지금까지의 환경을 살펴보면 그림과 같다. 

 

따라서 도커 서버(외부서버)에 기동 중인 tomcat에 접근 하기 위해서 해당 docker-server에 포워딩된 포트 번호를 확인하면 된다.

본인은 docker server는 8081:8080으로 되어있기 때문에 8081로 접속하면 된다.

Poll SVM 테스트 하며 한글을 넣었는데 인코딩이 깨지고 있으니 무시해주시면 됩니다.

 

느낀점

따라하는 것만으로도 많이 어려웠고 무엇보다 docker, 리눅스 명령어 등이 많이 어색했으며 포트를 할당하여 접근한다는 개념이 너무 어려웠다