-
[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
( 참고한 사이트✨ )
젠킨스에 메이븐 연결 - 12/17 AWS EC2 JENKINS 스프링부트 자동배포
1. AWS EC2 인스턴스 생성 2. EC2 보안그룹 인바운드 규칙 접속 설정 3. Putty로 EC2접속, PPK키 생성 4. EC2 인스턴스에 스왑 파티션 생성, 설정 5. EC2에 자바1.8 설치, 설정 6. EC2에 젠킨스 설치 7. 젠킨스 접.
blog.nachal.com
https://bogdancornianu.com/change-swap-size-in-ubuntu/
Change swap size in Ubuntu 18.04 or newer - Bogdan Cornianu
Swap is a special area on your computer, which the operating system can use as additional RAM. In the following example, we'll extend the swap space available in the /swapfile file from 4 GB to 8 GB.
bogdancornianu.com
https://choiiii-dev.tistory.com/18
AWS + 젠킨스 + 스프링 부트 ci/cd 구현 6
[Jenkins] - AWS + 젠킨스 + 스프링 부트 ci/cd 구현 5 AWS + 젠킨스 + 스프링 부트 ci/cd 구현 5 [Jenkins] - AWS + 젠킨스 + 스프링 부트 ci/cd 구현 4 AWS + 젠킨스 + 스프링 부트 ci/cd 구현 4 [Jenkins] - AW..
choiiii-dev.tistory.com
https://www.youtube.com/watch?v=BKDX0rTwkcE&ab_channel=DevOpsHint
https://digitalavenue.dev/Install-SonarQube-On-Ubuntu-Debian/
How to Install and Configure SonarQube 8 on Ubuntu 18.04
Digital Avenue Carefully Verified DevOps and System Admin Tutorials For Kubernetes, Docker, Jenkins, Azure, AWS, Linux and more. Learn DevOps Now.
digitalavenue.dev
Jenkins 와 GitHub를 SSH 연결한 후, Build및 Excecute Shell 이용
이제 본격적으로 Spring boot 애플리케이션 배포 자동화 과정을 설명할 거에요. 이전 포스팅에서 한번 언급했듯 아래의 과정을 따라 배포 서비스를 행할 거에요. 특정 Branch의 GitHub가 변경된 사항을
blog.jiniworld.me
[Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 1
이 글을 시작으로 jenkins와 github의 특정 프로젝트를 연동 시켜두고 해당 프로젝트에서 push 발생 시, jenkins가 이것을 인식하고 자동으로 배포하는 과정에 대해서 진행하려고한다. 배포될 프로젝트
dbjh.tistory.com
https://kitty-geno.tistory.com/100
Jenkins(젠킨스) | Maven, War 빌드&배포하기
Jenkins 설치 AWS | EC2(Linux)에 Jenkins 설치하기 Jenkins(젠킨스) 설치 전, 자바를 필요로 하기 때문에 설치 후 진행한다. https://kitty-geno.tistory.com/25 설치 진행 3. 설치된 자바 버전 확인 java -versi..
kitty-geno.tistory.com
https://woopi1087.tistory.com/71
[Jenkins] Jenkins ~ Github 연동, 자동 빌드, 배포 (SpringBoot, Maven)
● 먼저 Jenkins 가 설치되어 있어야 한다. https://woopi1087.tistory.com/69 yum list installed | grep jenkins 2. Jenkins 설치파일을 저장소에 다운로드 명령어 =====> wget -O /etc/yum.repos.d/.."..
woopi1087.tistory.com
https://rangerang.tistory.com/42
[Jenkins]ec2 + Spring Boot + Maven + Git + Jenkins - 2.Jenkins로 스프링 프로젝트 배포
PART 1 젠킨스로 스프링부트 프로젝트 배포 1# JDK, Git, Maven 설정 먼저 젠킨스에서 사용할 툴을 설정해준다. Maven을 이용한 스프링 부트를 배포하기 위해선 JDK, Git, Maven을 설정해준다. 젠킨스 메인
rangerang.tistory.com
'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