[목차]
1. 빌드 완료된 jar 파일 확인
2. jar 파일 실행
3. 젠킨스(jenkins) 설정 추가
앞서 ngrok을 이용하여 깃헙과 젠킨스를 연동해 빌드 해 봤다.
https://dalichoi.tistory.com/13
젠킨스(jenkins)와 깃헙(github) 연동하기
목차 0. 사전준비 1. 젠킨스 관리 설정 2. 젠킨스 새로운 아이템 생성 및 설정 3. github webhooks 설정 깃헙(github)에 코드를 push하면 젠킨스(jenkins) 서버를 통해 자동 빌드하는 걸 해보자. 배포는 너무
dalichoi.tistory.com
이번엔 빌드된 jar파일을 실행까지 하여 외부에서 접속 가능하게 만들어 보자.
1. 빌드 완료된 jar 파일 확인
- 젠킨스에서 빌드된 jar 파일은 아래 위치에 있다
cd /var/lib/jenkins/workspace/[젠킨스 아이템명]
workspace 디렉토리 아래에 젠킨스에서 정해줬던 이름으로 디렉토리가 있을 것이다.
뒤에 @tmp로 된 것 말고 상단 jenkins-github/build/libs/ 로 들어가보면 jar 파일이 존재한다.
- 최종 경로
cd /var/lib/jenkins/workspace/jenkins-github/build/libs
만약 '-plain' 키워드가 붙어 있는 jar 파일도 존재한다면, plain 없는 jar(executable jar) 파일을 사용하면 된다.
참고로 plain 파일은 gradle 2.5 버전부터 따로 설정이 없으면 생기는 빌드 결과물로 gradle의 jar task로 생성된다.
앱 실행에 필요한 의존성을 포함하지 않고 소스코드의 클래스 파일과 리소스 파일만 포함한다.
해당 plain 파일이 불필요하다면 gradle 설정을 변경해 빌드 시 제외할 수 있다.(아래 문서 참고)
Spring Boot Gradle Plugin Reference Guide
To manage dependencies in your Spring Boot application, you can either apply the io.spring.dependency-management plugin or use Gradle’s native bom support. The primary benefit of the former is that it offers property-based customization of managed versio
docs.spring.io
2. jar 파일 실행
- 아래 명령어를 이용해 스프링 jar 파일 실행
# java -jar [jar파일명]
java -jar jpashop-0.0.1-SNAPSHOT.jar
# 경로 포함 명령어
java -jar /var/lib/jenkins/workspace/jenkins-github/build/libs/jpashop-0.0.1-SNAPSHOT.jar
스프링 구동이 되면 성공.
스프링 구동 시 특정 profile로 실행하는 옵션은 '-Dspring.profiles.active=[특정profile]' 을 넣어준다.
java -jar -Dspring.profiles.active=dev jpashop-0.0.1-SNAPSHOT.jar
- 프로세스를 중단없이 백그라운드로 구동하는 방법
nohup java -jar jpashop-0.0.1-SNAPSHOT.jar &
nohup은 'no hang up'의 약자로 프로세스가 데몬 형태로 실행되어 종료되지 않고 계속 실행되게 하는 리눅스 명령어다. 세션이 종료되어도 프로세스는 살아있다는 얘기.(참고로 nohup으로 쉘 파일을 사용하려면 쉘 파일이 755(-rwxr-xr-x) 이상이어야 한다.)
&는 백그라운드로 실행시킬 때 사용한다. 명령어 맨 끝에 붙여준다.
따라서 nohup 과 & 를 조합하여 사용한다.
참고로 이렇게 실행하면 현재 위치에 nohub.out 으로 로그가 남는다.
- 로그 출력
spring.log 파일에 출력과 에러 모두 기록
nohup java -jar jpashop-0.0.1-SNAPSHOT.jar > spring.log 2>&1 &
참고로 0 - 표준 입력 / 1 - 표준 출력 / 2 - 표준 에러 이다.
'2>&1'은 표준 에러도 표준 출력이 쓰여지는 파일에 리다이렉션 하겠다는 뜻.
- 실행중인 (스프링)프로세스 종료하는 방법
# 실행중인 스프링 pid 찾기
jps | grep .jar |awk '{print $1}'
# 백틱 기호를 이용해 프로세스 종료
kill -9 `jps | grep .jar |awk '{print $1}'`
실행중인 스프링의 pid를 알아내어 kill 명령어를 이용한다.
pid를 알아내는 방법은 여러가지가 있는데 여기선 jps 명령어를 이용했다.
참고로 'ps -ef' 명령어로 pid를 알아오는 방법도 많이 사용한다.
jps는 'java virtual machine process status tool'로 실행중인 java virtual machine 목록을 아래처럼 pid와 함께 심플하게 보여준다.
grep과 awk 명령어를 이용하여 pid만 알아낸 뒤 kill 하면 된다.
참고로 awk 명령어는 입력으로 지정된 파일로부터 데이터를 분류한 다음 패턴 매칭 여부를 검사하거나 데이터 조작 및 연산 등의 액션을 수행하고, 그 결과를 출력하는 기능이 있다.
여기선 grep .jar로 찾은 데이터의 첫번째($1) 필드만 출력해 준 것.
kill을 하면 아무런 반응이 없지만 성공한 것이다.
제대로 되었는지 jps나 ps -ef로 실행중인지 확인해 본다.
자, 이제 실행에 필요한 내용은 익혔다.
젠킨스에 배포 후 빌드에서 실행까지 자동화 해보자.
3. 젠킨스(jenkins) 설정 추가
- 먼저 젠킨스가 실행해줄 스크립트 파일을 작성한다.
여러 방법이 있겠지만 해당 방법이 심플하고 편하다.
각자 목적에 맞게 스크립트는 작성해주면 된다.
vi ~/spring.sh
- 스크립트 내용(java -jar 내용은 각자 맞게 수정해야됨)
#!/bin/sh
kill -9 `jps | grep .jar |awk '{print $1}'`
nohup java -jar -Dspring.profiles.active=dev /var/lib/jenkins/workspace/jenkins-github/build/libs/jpashop-0.0.1-SNAPSHOT.jar > ~/spring.log 2>&1 &
- 생성한 스크립트 파일의 권한 수정
sudo chmod 755 ~/spring.sh
- 젠킨스 설정 추가
아래처럼 만들어 준 쉘스크립트를 실행시켜 주는 명령어 입력
하지만 배포 중 권한 문제로 실패할 수 있다.
이럴 땐, jenkins_user에 대한 권한을 수정해 줘야 한다.
젠킨스 서버에서 /etc/sudoers 파일에 권한 설정을 추가한다.
sudo vi /etc/sudoers
# 열린 sudoers 파일에서 아래 내용 추가
jenkins ALL=(ALL) NOPASSWD: ALL
이렇게.
저장 시, readonly 파일 메세지가 나오면 'wq!'로 강제 저장.
다시 푸시 이벤트를 일으켜 보면 아래처럼 콘솔에서 성공하는 것을 확인할 수 있다.
구동할 때 찍는 spring.log 파일을 확인해보면,
성공.
끝.
'개발 > DevOps' 카테고리의 다른 글
Docker 이미지와 컨테이너 관련 명령어 (0) | 2022.12.27 |
---|---|
Docker 엔진 설치 (0) | 2022.12.27 |
젠킨스(jenkins)와 깃헙(github) 연동하기 (0) | 2022.12.22 |
ngrok을 이용해 외부에서 로컬로 접속하기 (0) | 2022.12.22 |
리눅스(CentOS 7)에 젠킨스(Jenkins) 설치하기 (0) | 2022.12.21 |