DEV&OPS/Java

Jenkins로 AWS에 배포

ALEPH.GEM 2025. 11. 1. 16:44

 

AWS 계정생성

https://aws.amazon.com/ko/free

 

무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어

AWS 프리 티어 제품 및 서비스를 통해 AWS 플랫폼, 제품 및 서비스를 무료로 체험해 볼 수 있습니다. AWS 프리 티어 서비스의 100가지 제품 및 서비스를 찾아보세요.

aws.amazon.com

AWS프리티어로 무료 계정 생성을 합니다. 

계정 생성에 필요한 정보들을 입력하고 결제 정보와 연락처 정보를 입력합니다.

지원 플랜 선택은 무료로 선택하고 완료합니다.

AWS 인스턴스를 생성하기 전에 AWS 계정 보안 설정을 참고해 주세요.

 

 

AWS 인스턴스 생성

1. AWS 콘솔에 로그인합니다.

 

2. EC2(Elastic Compute Cloud)를 이용하겠습니다. 콘솔에 로그인 버튼을 클릭한 후 AWS service 페이지에서 모든 서비스를 클릭해서 컴퓨팅> EC2를 선택합니다.

 

3. 표시된 EC2 대시보드에서 인스턴스 시작을 클릭해서 인스턴스 작성을 시작합니다.

 

4. AMI(Amazon Machine Image)를 선택하는데 여기서는 CentOS7을 기준으로 합니다. AWS Marketplace를 클릭해서 CentOS를 검색해서 CentOS7을 선택합니다.

 

5. 요금 안내가 표시되는데 프리 티어 사용 가능을 확인하고 Continue 버튼을 클릭합니다.

 

6. 인스턴스 유형을 요금이 발생하지 않는 t2.micro를 선택한 후 "검토 및 시작"을 클릭합니다.

 

7. 범용 SSD에서 부팅 화면에서는 권장 사항을 선택 후 다음을 클릭합니다.

 

8. 인스턴스 시작 검토 페이지에서 보안 그룹의 보안 그룹편집을 클릭해서 보안 그룹을 변경합니다.

 

9. 보안 그룹 할당에서 "기존 보안 그룹 선택"을 선택하고 이름이 default인 보안 그룹을 체크 후 검토 및 시작 버튼을 클릭합니다.

 

10. 보안 그룹이 변경된 것을 확인하고 시작 버튼을 클릭합니다.

 

11. 키 페어가 등록되어 있지 않으면 적절한 SSH 키를 생성해 줍니다. 이 키는 SSH로 접속할 때나 젠킨스에서 배포할 때 사용합니다. 키페어를 다운로드하여서 로컬 PC에 저장해 둡니다.

 

12. 키 페어가 다운로드된 후 인스턴스 시작 버튼을 클릭해서 인스턴스를 시작합니다.

 

13. 대기화면이 끝나면 '시작 상태'에 대한 설명 및 사용량, 리눅스 시스템에 접속하는 버 등을 알려주는 페이지가 나옵니다. 그 페이지에 있는 '인스턴스 보기'를 클릭합니다. 인스턴스 생성에 수 분 이상 소요될 수 있습니다.

 

 

보안 그룹 설정

SSH로 AWS인스턴스에 접속이 가능하도록 '보안 그룹'을 설정합니다.

22번 포트에 인바운드 가능하게 설정합니다.

 

1. 좌측 메뉴에서 NETWORK & SECURITY > 보안 그룹을 클릭하고 그룹 이름이 'defaul'인 보안 그룹을 선택합니다. 그룹을 추가하지 않았다면 보안 그룹이 하나만 표시됩니다.

 

2. 아래쪽 탭 중에서 '인바운드' 탭을 클릭한 후 편집 버튼을 클릭합니다.

 

3. 인바운드 규칙 편집 화면에서 SSH 접속용으로 22번 포트와 톰캣 접속용으로 8080 포트를 설정한 다음 저장을 클릭합니다.

 

4. 생성한 인스턴스에 SSH로 접속해서 톰캣을 설치합니다.

 

5. SSH 클라이언트는 없다면 PuTTY를 다운로드하여서 사용하십시오.

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

 

Download PuTTY: latest release (0.83)

This page contains download links for the latest released version of PuTTY. Currently this is 0.83, released on 2025-02-08. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

 

6. puttygen.exe를 실행해서 AWS엣 다운로드한 키 (.pem) 파일을 PuTTY용 ppk 파일로 변환합니다. puttygen화면에서 Actions> Load를 클릭한 뒤 파일 형식을 모든 파일로 변경 후 pem 파일을 선택합니다. 그리고 Save private key 버튼을 클릭해서 개인키를 로컬 PC에 저장해 둡니다. "암호 없이 저장하겠습니까?" 경고문이 나오면 "예"를 클릭합니다.

 

7. AWS 인스턴스의 DNS 주소를 복사한 뒤 PuTTY를 실행해서 SSH로 접속합니다.

  1. AWS 콘솔 좌측 메뉴에서 인스턴스를 클릭한 후 접속할 인스턴스를 선택합니다.
  2. 하단에 퍼블릭 DNS(IPv4) 주소를 클립 보드에 복사합니다.

 

8. DNS 주소가 복사되었다면 putty.exe를 실행해서 복사한 퍼블릭 DNS 주소를 Host Name(or IP address)의 입력란에 붙여 넣은 뒤 Connection > SSH > Auth를 클릭합니다.

 

9. Auth 메뉴에서 Browse 버튼을 클릭해서 위에서 저장했던 private key(.ppk)파일을 선택합니다.

 

10. 이제 Open 버튼을 클릭해서 SSH로 접속할 수 있습니다. SSH 인증 경고문이 뜬 뒤 "예"를 누르면 접속됩니다.

 

11. login as: centos를 입력하고 엔터를 누르면 로그인됩니다.

 

 

 

AWS에 톰캣 설치

1. SSH로 AWS 인스턴스에 접속 후 root 사용자로 전환해 라이브러리를 업데이트합니다.

sudo su -
yum update

 

2. 자바를 설치합니다.

yum install java

 

3. 톰캣을 다운로드하여서 설치합니다. 예제에서는 /usr/local/src에 다운로드해서 압축을 풉니다. 톰캣 다운로드 페이지에서 tar.gz 형식으로 다운로드합니다.

 

4. 다운로드 페이지의 Mirrors 항목에서 Other mirrors 값을 http://www-eu.apache.org/dist/ 으로 선택합니다. tar.gz 링키에서 마우스 오른쪽 클릭해서 Copy Link Location을 선택해서 링크 주소를 복사합니다.

 

5. PuTTY 화면으로 돌아가서 다운로드할 디렉터리로 이동 후에 curl 명령어로 다운로드를 진행합니다.

curl 아까복사했던다운로드용URL링크주소

 

6. 다운로드가 완료되면 압축을 풉니다.

tar -zxvf 다운받은톰캣파일.tar.gz

 

7. 압축 해제된 파일을 mv 명령으로 이동 후 소유자를 root에서 centos로 변경합니다.

mv apache-tomcat-버전/ /usr/local/tomcat
chown -R centos:centos /usr/local/tomcat/

 

8. centos 유저로 변경한 후 톰캣을 실행합니다.

su centos
/usr/local/tomcat/bin/startup.sh

 

9. 톰캣이 정상적으로 작동되는지 톰캣 화면에 접속합니다. AWS의 인스턴스의 퍼블릭 DNS에 표시되어 있는 도메인의 뒤에 8080 포트를 붙여서 접속합니다. 톰캣 고양이 그림이 나오는지 확인해 주세요.

 

 

 

배포하기

젠킨스에서 원격 환경에도 톰캣 매니저를 이용해서 배포가 가능하지만, 일반적으로는 SSH로 배포합니다.

 

1. 젠킨스 설정에서 플러그인 설치 화면으로 가서 Publish Over SSH 플러그인을 다운로드하고 설치합니다.

 

2. Jenkins 관리 > System > Publish over SSH 항목으로 이동합니다.

 

3. AWS 인스턴스 작성 시 다운로드한 키파일(.pem) 파일을 텍스트 에디터로 열어서 SSH Key정보를 입력한 후 그 SSH Key로 접속가능한 서버를 추가합니다.

Passphrase : 키에 암호화를 걸었다면 해당 암호를 입력합니다. 예제에서는 암호를 입력하지 않았으니 공란으로 둡니다.

Path to Key: 키 파일이 있는 절대 경로를 입력합니다. 아니면 Key 항목에 .pem 파일을 열어서 입력된 키값을 복사해서 넣습니다.

 

4. SSH Servers에 추가 버튼을 눌러서 대상 서버를 추가합니다.

  • name : 적당한 이름을 넣습니다.
  • hostname: 해당 서버의 주소를 입력합니다. 여기서는 AWS 퍼블릭 DNS주소를 복사해서 붙여 넣습니다.
  • Username: SSH로 접속할 유저를 입력합니다. 예제에서는 centos를 입력합니다.
  • Remote Directory : 접속할 때 홈 디렉터리를 입력합니다. 예제에서는 톰캣의 홈 디렉토리를 입력합니다.

 

5. 입력 후 Save 버튼을 클릭한 뒤 로컬 배포에서 사용하던 잡(job)을 변경해서 SSH를 이용해서 배포를 해봅니다.

https://aacii.tistory.com/454

 

Jenkins (젠킨스)

젠킨스는 자바 오픈소스 소프트웨어이며 플러그인으로 다른 다양한 시스템들과 연동할 수 있습니다. 주요기능git과 연동웹 인터페이스테스트 보고서 생성빌드 및 테스트 자동화코드 품질 감시

blog.aacii.net

 

6. DeployTomcatJob을 선택하고 구성을 클릭합니다. 위 454 게시글에서 추가했던 Deploy war/ear to a container 항목의 우측 상단 X 버튼을 눌러서 삭제합니다.

 

7. 빌드 후 조치에서 Send build artifacts over SSH를 선택하고 필요한 정보를 입력합니다. Name에는 SSH-Key를 선택하고 Transfers 부분에서 Source Files에 전송할 war 파일의 경로를 입력합니다. (예: build/libs/war파일이름.war)

 

8. Remove prefix는 Source Files에서 제외할 접두사를 지정합니다.

Remote Directory는 파일을 전송할 디렉터리를 지정합니다. 위에서 SSH로 접속 시 홈 디렉터리로 톰캣 홈을 지정해 주었으니 여기서는 그 하위 폴더인 webapps 만을 입력합니다.

Exec command는 파일이 전송된 후 실행할 명령어를 지정할 수 있습니다. 실제 운영에서 배포 전후에 처리할 작업을 처리하는 용도로 사용합니다.

다 입력했다면 저장합니다. 예제에서는 하나으니 Transfers만 설정했지만 실무에서는 여러 개 설정하는 경우가 많습니다. Transfers 추가는 Add Transfer Set을 클릭하면 됩니다.

 

9. 저장된 내용으로 Build Now를 클릭합니다. 빌드가 성공적으로 끝나면 AWS에 배포가 잘 되었는지 확인합니다.

 

 

깃허브 훅

깃허브에 소스 변동이 있을 때 자동으로 빌드되도록 설정해 봅시다. 

 

1. 자신의 깃허브에 있는 프로젝트(저장소)의 Settings로 이동합니다.

 

2. 여기서는 간편한 Webhooks를 이용합니다. 좌측 메뉴에서 Webhooks를 클릭하고  우측 상단의 Add webhook을 클릭합니다.

 

3. Payload URL에 다음과 같이 URL을 입력합니다.

http(s)://젠킨스서버URL/github-webhook/

 

4. Which events would you like to triger this webhook 에는 푸시 이벤트가 발생했을 때 실행되도록 Just the push event를 선택합니다. 

 

5. Payload URL을 다 입력했다면 Add webhook을 클릭하면 완료 화면이 표시됩니다.

 

6. 화면에서 Edit 버튼을 눌러서 하단에 표시되는 Recent Deliverires 부분에 연결이 잘 되었나 확인합니다.

여기까지가 깃허브 설정입니다.

 

7. 젠킨스에서 job 구성을 클릭합니다. Triggers에서 Github hook trigger for GITScm polling을 체크하고 저장합니다.

이제 소스를 push 하면 젠킨스의 job이 실행되어 배포까지 가능해집니다.

 

 

 

매개변수 전달

특정 깃허브 브랜치를 지정해서 빌드를 실행하거나 특정 버전을 배포하거나 특정 서버에 배포하는 등 실무에서 매개변수를 사용할 수 있습니다.

 

1. 매개변수를 지정하는 방법은 job의 구성 메뉴 General에서 '이 빌드는 매개변수가 있습니다'를 체크하면 됩니다. 

 

2. 대상 서버에 접속하기 위한 SSH정보는 이전 정보를 그대로 사용합니다.

 

3. 등록한 내용은 jenkins 관리 > 시스템 설정 > publish over SSH에서 확인 및 변경이 가능합니다.

이전에 만들었던 DeployTomcatJob과 같은 기능을 셸스크립트로 실행하는 공통 잡을 만들어 보겠습니다.

실행 순서는 다음과 같습니다.

  1. 실행 중인 톰캣을 정지합니다.
  2. webapps에 배포된 애플리케이션을 삭제합니다.
  3. 젠킨스 서버에서 war 파일을 복사합니다.
  4. 톰캣 서버를 시작합니다.

4. 새로운 Item을 클릭해서 Freestyle project에 DeployTomcatWithShellJob 이라는 이름으로 새로운 잡을 하나 만들어봅니다.

General에서 '이 빌드는 매개변수가 있습니다'에 체크하고 '매개변수 추가'에서 String Parameter를 선택합니다.

 

5. 첫 String Parameter에서 매개변수 명에는 CI_WAR를 입력하고, Default Value 에는 build/libs/war파일이름.war 를 입력합니다.

 

6. 다시 매개변수 추가를 클릭하고 String Parameter를 선택한 후 매개변수 명에 CI_REMOTE_PATH를, Default Value에 webapps를 입력합니다.

 

7. 같은 방법을 CI_NAME에는 적절한 이름을, BUILD_ID에 dontKillme를 추가하여 매개변수를 추가합니다. BUILD_ID는 젠킨스가 대상 서버에서 톰캣을 실행한 후 접속을 종료하더라도 톰캣 프로세스를 계속 실행하는 용도입니다. 

 

8. Git에 적절한 저장소를 지정해 주고, Build에서 Invoke를 적절히(gradle or maven) 추가 후 clean install를 입력합니다.

 

9. 빌드 후 조치에서 Send build artifacts over SSH를 선택한 후 실행할 명령어 순서대로 입력합니다. 

  • SSH Server > Name은 앞에서 설정한 것을 선택해 줍니다.
  • Transfers > Exec command 에는 톰캣 중지 스크립트인 shutdown.sh 와 기존 배포된 App 삭제 명령어를 입력합니다.

10. Add Transfer Set을 클릭하고 나머지 명령어도 입력해 줍니다.

  • Source files는 ${CI_WAR}
  • Remove prefix는 build/libs 혹은 target
  • Remote directory는 ${CI_REMOTE_PATH}

11. 이제 톰캣을 실행하는 설정을 합니다. Add Transfer Set을 추가하고 Exec command에 톰캣실행 스크립트인  /usr/local/tomcat/bin/startup.sh를 입력합니다.

저장하고 대시보드로 돌아가면 Build Now가 사라지고 Build with Parameters가 보입니다. 클릭해서 페이지를 이동합니다.

 

12. 앞에서 설정한 매개변수를 지정할 수 있는 화면이 대시보드에 나옵니다. 기본값은 앞에서 지정한 Default Value로 되어있습니다. 빌드하기를 눌러서 빌드를 실행하고 콘솔 출력에서 정상적으로 배포되는지 확인합니다.

 

 

 

빌드 파이프라인

여러 개의 Jenkins의 Job들을 묶어서 실행하는 빌드 파이프라인을 만들 수 있습니다.

플러그인을 설치해서 사용하면 됩니다.

여기서는 사용법을 생략합니다.

 

 

 

소나큐브

소나큐브는 코드를 분석하고 테스트로 얼마나 검증했는지 측정해 줍니다. 

젠킨스와 소나큐브를 연결해서 사용할 수도 있는데 자세한 내용은 여기서 다루지 않겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90