ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.