-
Jenkins SSH 키로 Tomcat 자동 배포 구축하기(플러그인 X)Cloud/Jenkins 2025. 6. 11. 14:11
Jenkins는 지속적 통합 및 지속적 배포(CI/CD)를 지원하는 오픈 소스 자동화 도구로, 소프트웨어 개발 프로세스를 자동화하여 개발자들이 효율적으로 협업하고 소프트웨어를 더욱 신속하게 제공할 수 있도록 도와줍니다.
✅ Jenkins을 이용하여 Tomcat으로 배포까지
Jenkins를 이용하여 빌드한 WAR 파일을 Tomcat 서버에 배포하는 전체 과정을 정리 :)
🚀 Docker Container 정리 및 네트워크 설정
개발환경을 Mac(M3)의 Docker 환경으로 aarch가 아닌 amd64 환경으로 구축 테스트를 하고 있습니다.
그래서 먼저 테스트 환경을 깔끔하게 구성하기 위해, 기존에 실행 중이던 Docker Container를 정리합니다.
# 기존 컨테이너 정리 docker ps -a docker stop [컨테이너_ID] docker rm [컨테이너_ID]
그 다음, 새로운 Tomcat 컨테이너를 실행할 때 Jenkins와 통신이 가능하도록
--network
옵션을 추가합니다.# Docker 네트워크 생성 docker network create jenkins-network # Jenkins 컨테이너 실행 docker run --name jenkins -dit --network jenkins-network --hostname jenkins -p 8080:8080 jenkins/jenkins:latest
🚀 SCP를 위해 SSH 설정하기
Docker 이미지에는 SSH 서버가 포함되어 있지 않기 때문에, SSH를 사용할 수 있도록 직접 설정해줘야 합니다.
방법은 2가지 입니다.
1. DockerFile에서 'openssh-server' 세팅하는 방법.
2. 기동된 Docker Container에 접속하여 'openssh-server' 세팅하는 방법.
[ 방법 1 ] 사용자 정의 Dockerfile 예시
# Dockerfile FROM tomcat:9.0 RUN apt-get update && \ apt-get install -y openssh-server && \ mkdir /var/run/sshd RUN echo 'root:root' | chpasswd RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config EXPOSE 22 8080 CMD service ssh start && catalina.sh run
이미지 빌드 및 실행
⚠️ docker run 할때 --network 옵션으로 같은 네트워크로 묶었기 때문에 별도로 ssh port(22)를 명시하지 않아도 됩니다!
# Docker 이미지 빌드 docker build -t tomcat-ssh . # 컨테이너 실행 docker run -d --name tomcat-container --network jenkins-network -p 8080:8080 tomcat-ssh
[ 방법 2] 기동된 Docker Container 접속하여 openssh-server 세팅
# openssh-server Download microdnf install -y openssh-server # SSH 데몬이 PID 파일 등을 저장할 디렉토리 준비 mkdir -p /var/run/sshd # SSH 데몬을 포그라운드 모드로 실행 (컨테이너에서 일반적) /usr/sbin/sshd -D &
🚀 Jenkins에서 SSH 키 생성하기
Jenkins에서 SSH 키를 생성하여 Tomcat 컨테이너에 비밀번호 없이 접근할 수 있도록 설정합니다.
1) SSH 키 생성
ssh-keygen -t rsa -b 4096
2) 입력 흐름 예시
Generating public/private rsa key pair. Enter file in which to save the key (/home/jenkins/.ssh/id_rsa): ← [그냥 엔터] Enter passphrase (empty for no passphrase): ← [그냥 엔터] Enter same passphrase again: ← [그냥 엔터]
❓ [그냥 엔터]
- 기본 경로 사용:
~/.ssh/id_rsa
- 패스프레이즈 없이 자동 접근을 위해 비워둠
3) 키 생성 확인
ls ~/.ssh/ # Result ## 결과 jenkins@jenkins:~/.ssh$ ls id_rsa id_rsa.pub known_hosts known_hosts.old
id_rsa
: 개인 키 (절대 외부 공개 금지)id_rsa.pub
: 공개 키 (Tomcat 서버에 등록)
4) 공개 키 등록
공개 키를 Tomcat 컨테이너의 SSH 사용자에 등록합니다.
자동 등록:
ssh-copy-id root@톰캣서버-IP -p 22 # Result ## 결과 [tomcat@tomcat:/home/tomcat/.ssh]$ ls authorized_keys
또는 수동 등록:
cat ~/.ssh/id_rsa.pub | ssh root@컨테이너-IP -p 2222 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
🚀 Jenkins에서 WAR파일을 Tomcat으로 전송
Jenkins Job의 빌드 후 단계(Post Steps)에서 Execute Shell을 추가하여
scp
명령을 실행합니다.scp -P 22 ./target/*.war root@톰캣서버-IP:/usr/local/tomcat/webapps/
명령어 설명
-P 22
: 외부에서 컨테이너에 SSH 접근할 포트./target/*.war
: Maven 빌드 결과물 위치root@톰캣서버-IP
: SSH 접속 정보/usr/local/tomcat/webapps/
: WAR 파일 복사 위치
이 설정을 통해 Jenkins가 빌드한 결과물을 Tomcat으로 자동 전송하고 배포까지 진행할 수 있습니다.
📌 TEST
# GitHub에 코드 확인 ( https://github.com/jo0ozip/Jenkins-practice )
01_HelloTestCode 확인해보면 결과내용이 "Welcome to Jenkins WAR Project" 인 것을 확인할 수 있습니다.
테스트가 끝나면 폴더형식으로 Git을 유지하겠지만 현재는 작성하면서 진행하고 있어서 상위로 진행하고 있습니다!
# Jenkins 페이지에서 빌드(재생버튼) 클릭하기
# 진행상황 확인
# 성공적으로 완료
🎯 마무리
이번 글에서는 Jenkins를 이용해 Docker 기반의 Tomcat 서버에 WAR 파일을
자동으로 배포하는 과정을 단계별로 정리해보았습니다.
초기에는 다소 복잡해 보일 수 있지만, 한 번만 환경을 잘 구성해두면
이후에는 Jenkins가 알아서 배포까지 척척 처리해줍니다 :)
갑작스러운 개인사정으로 업로드가 늦어었습니다 😭
'Cloud > Jenkins' 카테고리의 다른 글
Jenkins Git Repository에서 가져와서 빌드하기 (0) 2025.05.30 Jenkins Maven 설정하기 (0) 2024.06.24 Jenkins Github 설정하기 (0) 2024.06.21 Jenkins 첫 프로젝트 (0) 2024.05.08 Jenkins 설치 및 기본 설정 (0) 2024.03.25 - 기본 경로 사용: