일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- centos7
- fargate
- sagemaker
- 마이크로서비스
- AWS
- 오픈스택
- 구축
- OOP
- rocky
- serverless
- app&desk
- server base computing
- 서버 베이스 컴퓨팅
- eslint
- kubernetes
- no-param-reassign
- jenkins
- openstack
- 프로젝트
- 로키
- xenserver app&desk
- 머신러닝
- 가상 데스크탑 환경
- 객체지향
- microservices
- IaaS
- 젠킨스
- 쿠버네티스
- eks
- 설치
- Today
- Total
IT
[젠킨스] 이슈 - 젠킨스 안전하게 시작, 종료 jenkins start, stop, shutdown (graceful, safely) (feat. war 구축 환경) 본문
[젠킨스] 이슈 - 젠킨스 안전하게 시작, 종료 jenkins start, stop, shutdown (graceful, safely) (feat. war 구축 환경)
abcee 2020. 3. 30. 22:54Issue (특이 사항)
젠킨스(jenkins)는 jetty was engine 기반에서 돌아가는 서비스이다. 인터넷이 불가한 사설 네트워크(private network) 환경에서 젠킨스(jenkins)를 구축하는 경우 jenkins war 파일을 서버에 업로드하여 직접 실행하기도 한다.
이 경우 jre 를 통해 직접 jenkins war 파일을 실행 시켜야 하며 스크립트를 통해 안전하게 시작 및 종료 (start or graceful shutdown) 방법이 필요하다.
Solution (해결 방법)
start script(시작 스크립트)
젠킨스(jenkins) start의 경우 jre의 java 명령의 jar 옵션을 통해 war를 실행 시키면 된다.
이때 옵션을 통해 JENKINS_HOME 경로와 log파일의 경로를 지정할 수 있다.
/**
1. JENKINS_HOME 경로 지정
경로지정을 하지 않을 경우
로그인한 계정의 home 디렉토리의 .jenkins 디렉토리를 생성하여 사용한다.
**/
-DJENKINS_HOME=경로
/**
2. logfile 경로 지정
**/
--logfile=경로
/**
3. http 포트 지정
jenkins 접속을 위한 포트를 지정한다.
**/
--httpPort=8080
/**
4. ajp 포트 지정
보안상 혹은 성능상의 이슈로 WEB 서버를 통한
프록시 요청을 하지 않는 이상 사용하지 않는다.
사용하지 않을 경우 -1로 지정한다.
**/
--ajp13Port=-1
java -jar 를 통한 jenkins 인스턴스 실행 시 백그라운드에서 동작하도록 하여 포그라운드를 자유롭게 만들어준다.
[리눅스]
// nohup 을 통한 백그라운드 프로세스 실행
nohup $JDK_HOME/bin/java -DJENKINS_HOME=./jenkins_home -jar ./jenkins_2.46.3.war --httpPort=8080 --ajp13Port=-1 --logfile=./jenkins.log &
[윈도우]
// javaw를 통한 백드라운드 프로레스 실행
start /B C:\jenkins\jdk1.8.0_201\bin\javaw -DJENKINS_HOME=./HOME -jar ./jenkins.war --httpPort=8080 --ajp13Port=-1 --logfile=./jenkins.log
shutdown script(종료 스크립트)
jenkins shutdown의 경우 실행된 java -jar 프로세스를 강제로 kill 하여도 된다. 하지만 실행 중인 task 가 있거나 jenkins에 접속 중인 사용자가 어떤 요청을 했을 경우 프로세스 강제 종료(process force kill)는 심각한 문제(critical issue)를 초래할 수 있다.
// 실행 중인 프로세스 중 명령 내용이 jenkins 라는 이름이 포함된 프로세스 찾기
ps -ef | grep jenkins
// 실행 중인 젠킨스(jenkins) 인스턴스의 pid를 찾아 강제 프로세스 종료
kill -9 pid
jenkins는 이를 방지하기 위해 graceful shutdown 할 수 있는 방법이 존재한다.
jenkins에는 jenkins-cli 가 있어 동작 중인 jenkins 인스턴스에 제어 명령을 보낼 수 있다.
/**
jenkins-cli.jar 를 실행 시켜 safe-shutdown 명령 실행
-s 옵션 : jenkins 인스턴스의 url 및 포트 지정
-auth 옵션 : jenkins-cli를 통해 safe-shutdown 실행 권한이 있는 jenkins 계정의 id와 password
마지막에 실행 시킬 명령 : safe-shutdown
**/
java -jar ./jenkins-cli.jar -s http://[jenkins - url : port] -auth [id]:[password] safe-shutdown
jenkins cli의 경우 아래 경로를 통해 다운로드 받을 수 있다.
http://[jenkins - url : port]/jnlpJars/jenkins-cli.jar
'CI CD > jenkins' 카테고리의 다른 글
[젠킨스] 이슈 - 젠킨스 시작 시 Font 관련 에러 발생 (feat. NullPointerException) (1) | 2020.03.30 |
---|