-
[AWS + JENKINS + SONARQUBE] Spring 프로젝트 CI/CD 구현하기 2) CD 구현하기 ① (Jenkins 배포)Spring 2022. 9. 17. 09:14
지난 시간에 CI를 구현하였다면 이번엔 코드 배포도 자동으로 이루어지도록 구현해보자.
배포 배경 설정
먼저 프로젝트 배포 배경설정을 위해서 JDK, Maven을 설정해줄 것이다. 터미널에서 maven을 설치하고 설치된 jdk와 maven 경로를 확인할 수 있도록 설정해주자.
## java 확인 $ which javac $ readlink -f /usr/bin/javac ## JAVA_HOME 경로 설정 $ vim ~/.bashrc export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) export PATH=$PATH:$JAVA_HOME/bin ## 설정파일 실행 $ source ~/.bashrc ## 경로 확인 $ echo $JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 ## Maven 설치 및 버전 확인 $ sudo apt install maven $ mvn --version $ which mvn ## MAVEN_HOME 경로 설정 ubuntu@ip-172-31-0-9:/var/lib/jenkins$ sudo vi .bash_profile MAVEN_HOME=$(dirname $(dirname $(readlink -f $(which mvn)))) PATH=$PATH:$MAVEN_HOME/bin export MAVEN_HOME ## 설정파일 실행 및 확인 $ source .bash_profile $ env ## 경로 확인 $ echo $MAVEN_HOME /usr/share/maven
확인된 경로를 Jenkins에 등록해준다.
Jenkins 관리 -> Global Tool Configuration -> JDK에 확인된 JAVA_HOME 등록 -> Maven에 확인된 MAVEN_HOME 등록 -> 저장
배포 스크립트 저장
이제 배포를 위한 스크립트를 저장해주자. 다음 경로에 start.sh파일을 만들어준다. 젠킨스가 8080포트에서 실행되고 있기 때문에 프로젝트는 8081포트에서 구동되도록 설정해주었다.
ubuntu@ip-172-31-0-9:/var/lib/jenkins/workspace/jenkins$sudo vi start.sh nohup java -jar -Dserver.port=8081 /var/lib/jenkins/workspace/jenkins/target/demo-0.0.1-SNAPSHOT.jar &
프로젝트의 구성에서 배포 설정을 해준다.
Jenkins 프로젝트 -> 구성 -> Build -> Invoke top-level Maven targets에 설정해둔 Maven Version 선택 -> Goals에 clean package -D maven.test.skip=true입력 (테스트는 제외하고 실행) -> 추가로 실행할 Excute shell 작성 -> save
PROCESS=$(ps -ef | grep demo-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}') if [${PROCESS} == ""] then echo "NO PROCESS!!!" else kill -9 ${PROCESS} fi BUILD_ID=dontKillMe sh /var/lib/jenkins/workspace/jenkins/start.sh;
위의 내용은 실행되고 있는 프로젝트가 있다면 죽이고 start.sh 스크립트를 실행하도록 하는 내용이다.
다시 빌드를 해보면 다음과 같이 8081포트에서 프로젝트가 실행된 것을 확인할 수 있다.
실제로 8081번 포트에 들어가면 프로젝트 내용을 확인할 수 있다.
만약 실행중 메모리 부족을 맞닦뜨린다면?
설치 및 실행을 진행하다가 이상하게 계속 멈추고 오류가 발생하는 경우가 있었는데 이런경우 메모리가 부족하여 발생하는 것으로 다음과 같이 swap 메모리 설정을 통해서 해결할 수 있었다.
$ sudo fallocate -l 2G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=a5adc48e-f4b3-4375-a3ae-028bb24ec1db $ sudo swapon /swapfile
( 참고한 사이트✨ )
https://bogdancornianu.com/change-swap-size-in-ubuntu/
https://choiiii-dev.tistory.com/18
https://www.youtube.com/watch?v=BKDX0rTwkcE&ab_channel=DevOpsHint
https://digitalavenue.dev/Install-SonarQube-On-Ubuntu-Debian/
https://kitty-geno.tistory.com/100
https://woopi1087.tistory.com/71
https://rangerang.tistory.com/42
'Spring' 카테고리의 다른 글
Transaction Propagation과 예외 전파 (0) 2023.02.12 [AWS + JENKINS + SONARQUBE] Spring 프로젝트 CI/CD 구현하기 3) CD 구현하기 ② (Sonarqube 설치 및 연동) (0) 2022.09.17 [AWS + JENKINS + SONARQUBE] Spring 프로젝트 CI/CD 구현하기 1) CI 구현하기 (Jenkins 설치 및 실행, Github연동(ssh, webhook)) (0) 2022.09.17 에러 페이지 반환하기 (Feat.ErrorController) (0) 2022.08.29 @Aspect (AOP) 적용하기 (0) 2022.06.09