IT

[젠킨스] 이슈 - 젠킨스 안전하게 시작, 종료 jenkins start, stop, shutdown (graceful, safely) (feat. war 구축 환경) 본문

CI CD/jenkins

[젠킨스] 이슈 - 젠킨스 안전하게 시작, 종료 jenkins start, stop, shutdown (graceful, safely) (feat. war 구축 환경)

abcee 2020. 3. 30. 22:54

Issue (특이 사항)

젠킨스(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

 

Comments