[AWS] EC2 Jenkins -(3) 배포 구현하기(SSH 사용 x, EC2 CPU 100% 문제)

yunSeok·2023년 12월 6일
0

사이드 프로젝트

목록 보기
9/14

1. Maven 설치

sudo apt update
설치 전 업데이트(필수!)

sudo apt install maven

mvn --version
Maven 버전 확인

JAVA_HOME환경 변수가 시스템에 구성되지 않았음을 나타냅니다. Maven에서는 JAVA_HOME JRE(Java Runtime Environment) 방식이 아닌 JDK(Java Development Kit) 설치 방식과 호환되는 기능이 필요합니다.

ls /usr/lib/jvm/
자바 설치 확인

nano ~/.bashrc
환경변수 편집기 실행

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

echo $JAVA_HOME
환경변수 적용


2. Jenkins Maven 설정

Jenkins 관리 -> Tools


Maven installations 설정 부분에서 원하는 이름 작성하고, 아래에 설치한 Maven 버전에 맞게 추가해주세요!



생성한 item의 설정에 와서 Build Steps 부분 설정하겠습니다.

먼저 아래 고급 버튼을 눌러서 POM 부분에 배포해야하는 프로젝트 파일의 pom.xml 위치를 적어줘야합니다.

Invoke top-level Maven targets 으로 선택하고
Maven Version에는 위에서 생성한 메이븐과 같은 이름으로 선택해줍니다.

❗ ❗ Goals부분이 매우매우 중요합니다. 이 부분에 들어갈 명령어가 Maven의 빌드 라이프사이클의 단계를 지정해줍니다.

간단한 명령어들 기능만 설명하겠습니다.

clean : 이미 빌드된 파일 삭제
package : 프로젝트의 target 디렉토리에 WAR 파일 생성
install : 빌드된 프로젝트를 로컬 Maven 레퍼지토리에 설치

📌 따라서 일단 Goals부분에 clean만 작성하고 테스트해보시는게 좋습니다.

clean만 작성 후 테스트 해보면

위 로그 처럼 삭제되는 빌드처리가 정상적으로 이루어져야합니다.

clean
install

정삭적으로 이루어진다면
위 처럼 작성해준 뒤 다시 빌드해주세요!


3. CPU 100% 서버 다운 문제...

빌드 시도를 해보았지만

무한 로딩이 걸리면서 서버가 다운되는 현상이 계속되었습니다.........

인스턴스 모니터링을 봤는데 CPU 사용량이 거의 100%까지 치솟고 완전 다운되었습니다.. 서버를 재부팅하고 다시 빌드 시도를 해봤지만 계속 되었습니다...

빌드중인 것을 취소하면 다시 CPU가 급격히 내려가네요....

구글링으로 찾아본 결과,
EC2 프리티어를 사용할 경우 t2.micro의 RAM이 1GB밖에 되지 않아 메모리 부족으로 다운되는 현상이었습니다.

사실 이 문제 때문에 Maven 명령어가 문제인가..
Jenkins 구성이 잘못된건가..
프로젝트 문제인가..
하면서 며칠동안 이것도 수정해보고 저것도 수정해봤는데 해결되지않아서 너무너무 고생했네요.......😥😥

메모리는!!
비용을 들여서 늘릴수도 있지만, 개인 공부 목적으로 하는데 많은 비용을 소모할 수는 없어서.. 해결 방법을 찾아보던 중 대체 메모리를 사용할 수 있는 방법을 찾게되어 적용해보도록 하겠습니다.


swap 사용으로 메모리 극복

swap를 이용했습니다!!

swap 메모리란 디스크 공간을 이용해 메모리를 대체할 수 있는 공간을 의미합니다.

1. 2GB 크기의 swap 파일 생성

sudo dd if=/dev/zero of=/swapfile bs=128M count=16

2. swapfile에 접근 권한 변경

sudo chmod 600 /swapfile

3. swapfile 파일을 스왑 공간으로 설정

sudo mkswap /swapfile

4. 스왑 공간을 활성화 (스왑파일을 실행)

sudo swapon /swapfile

5. 인스턴스 시작시 자동으로 swap 활성화

sudo vi /etc/fstab

명령어 실행후 출력된 설정에서

/swapfile swap swap defaults 0 0
명령어를 추가해줍니다.

6. 확인하는 방법

free 명령어나
sudo swapon -s 명령어로
생성된 swap을 확인할 수 있습니다.

📌 속도 저하의 문제가 있긴하지만 빌드 중 서버가 다운되는거에 비하면 너무너무 다행아닐까요..?

아까 빌드중 서버가 내려갔었지만.. 이번에는 잘 되는지 확인해보겠습니다.

clean
install

명령어 작성 후 빌드 처리하면

완료되었다고는 나오네요!! 로그 확인해보겠습니다.
(그나저나 6시....해결은 해야하니까!!!)

전체 로그라 조금 깁니다.

[정보] /var/lib/jenkins/workspace/project/project/target/controller-1.0.0-BUILD-SNAPSHOT.war을 /var/lib/jenkins/.m2/repository/com/project/controller/1.0에 설치 .0-BUILD-SNAPSHOT/controller-1.0.0-BUILD-SNAPSHOT.war
[정보] /var/lib/jenkins/workspace/project/project/pom.xml을 /var/lib/jenkins/.m2/repository/com/project/controller/1.0.0-BUILD-SNAPSHOT/controller-1.0에 설치 .0-BUILD-SNAPSHOT.pom

기존의 프로젝트가 삭제되고 새로운 war 파일이 빌드된 것을 확인할 수 있네요...

작업공간도 확인을 해보면,

원래는 없던 target이라는 폴더가 생성된 것을 확인할 수 있고

target 폴더 안에 war 파일이 생성된 것을 확인할 수 있습니다!!!

(참고로 war 파일의 이름은 pom.xml에 설정되어 있는 artifacIdversion으로 설정됩니다.)

며칠동안 고생하다가 되긴하니 좋..습니다..


Tomcat 설정

톰켓 설정을 하기 전, 톰켓 상태를 먼저 확인해보면 좋습니다!

sudo systemctl status tomcat9
실행되고 있는 톰켓 상태 확인

sudo systemctl daemon-reload
sudo systemctl restart tomcat9

재실행

첫번째로

sudo vi /etc/tomcat9/server.xml

명령어 입력 후 server.xml 파일 안에 URIEncoding="UTF-8"를 추가해줍니다.

그 다음

sudo vi /etc/tomcat9/tomcat-users.xml

명령어 입력 후 tomcat-users.xml 파일 안에

<role rolename="tomcat"/>
        <role rolename="admin"/>
        <role rolename="manager-gui"/>
        <role rolename="manager-script"/>
        <role rolename="manager-jmx"/>
        <role rolename="manager-status"/>
        <role rolename="admin-gui"/>
        <role rolename="admin-script"/>
        <user username="tomcat" password="tomcat" 
        roles="tomcat,admin,manager-gui,manager-script,manager-jmx,
        manager-status,admin-gui,admmin-script"/>

📌만약 파일을 열었을때 공백만 출력되면서 파일의 내용이 보이지 않는다면 권한 문제이므로 아래의 명령어 실행해주세요.

chmod 744 /etc/tomcat9/tomcat-users.xml
권한 변경

ls -l /etc/tomcat9/tomcat-users.xml
권한 확인 명령어

이것은 톰켓 관리자 페이지에 접근할 수 있도록 하는 설정입니다.

위처럼 톰켓 관리자 페이지에 접속하면 usernamepassword이 필요합니다. 사용하실 정보로 설정해주시면 됩니다.

설정 후,

sudo apt install tomcat9-admin

위 명령어로 톰켓 관리자 설치를 해주시면 됩니다.

주소창에 http://ip 주소/manager/html 를 입력하시면 톰켓 관리자 페이지에 접근 할 수 있게됩니다.

참고
sudo cat /var/log/tomcat9/catalina.out
톰켓 log 확인


4. 플러그인 설치

Deploy to container 검색 후 설치

빌드 후 조치 -> Deploy war/ear to a container 선택


표시된 부분을 작성해줘야합니다.

WAR/EAR files : **/*.war
Add Container : 설치한 톰켓 버전
Credentials : 위에서 설정한 톰켓 관리자 usernamepassword
Tomcat URL : 실제 배포할 URL

❗❗ Credentials 부분 계정을 기존 계정으로 사용하는 것이 아닌, +Add 누르고 톰켓 관리자 계정 정보를 추가해주도록 하겠습니다.
위에서 tomcat-users.xml 파일에 설정한 username="tomcat" password="tomcat" 이 정보를 Username, Password 에 작성해서 계정을 추가해주세요.


✅ 이렇게 까지 설정한다면 깃허브에 푸시 될때 트리거가 작동되어 젠킨스에서 Maven 버전으로 프로젝트 파일이 war 파일로 빌드되고 정상적으로 빌드가 된다면 빌드된 war 파일이 톰켓 서버에 배포까지 완료 됩니다.

URL에 http://ip 주소/프로젝트명 을 입력하게 되면 배포한 사이트가 열릴텐데요, URL에 프로젝트명을 생략할 수 있는 설정을 해주도록 합시다!

sudo vi /etc/tomcat9/server.xml

명령어 실행 해주세요.

<Context docBase="프로젝트명" path="/" reloadable="true"/>

<Host 바로 아래에 위의 설정을 추가해주세요!!

http://ip 주소만 입력하게 되면 제가 만든 프로젝트 사이트가의 배포가 잘 된것을 확인할 수 있습니다!!


📌 혹시 로컬 외의 환경에서 톰켓 manager 접속 오류가 발생한다면,

sudo vi /usr/share/tomcat9-admin/manager/META-INF/context.xml

명령어 입력 후 <Value className 부분을 주석처리 or 전체 허용하도록 변경해보세요.
원래는 127... 의 ip만 허용하는 설정입니다.

 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow=".*" />


swap 메모리 관련 참고
https://hjjooace.tistory.com/42

0개의 댓글