반응형

 

문제

  • jenkins에서 빌드가 완료되면 쉘 스크립트에서 실행한 nohup 프로세스가 종료되어 서버가 기동하지 않는 현상이 발생하였다.

 

원인

jenkins는 작업이 끝나면 생성된 모든 프로세스를 종료한다고 한다.

  • 쉘 스크립트에는 nohup로 jar 파일을 실행하는 구문이 존재한다. jenkins가 종료되면서 백그라운드로 실행되는 이 프로세스가 종료되는 문제가 생겨서 서버가 실행되지 않았을 것으로 추측했다.
  • 검색해보니 파이프라인을 사용하는 방식에서는 JENKINS_NODE_COOKIE=dontKillMe , 일반적인 방식에서는 BUILD_ID=dontKillMe 를 사용하여 processtreekiller가 BUILD_ID를 인식하지 못하도록 하여 jenkins가 자식 프로세스를 종료하는 것을 방지할 수 있다고 한다.

 

jenkins는 작업이 끝나면 생성된 모든 프로세스를 종료한다고 한다. 해당 이슈로 백그라운드 프로세스가 종료되는 것으로 생각하여 환경변수를 추가하여 해결해보려 했지만 실패했다. 환경변수를 추가했음에도 계속 백그라운드 프로세스가 종료되고 있었다. 안타깝게도 나의 케이스는 이 경우에 해당되지 않았다.

 

문제의 실마리는 스프링에서 기록하던 로그 파일에서 찾았다. 현재 프로젝트는 설정 파일을 jar에 포함시키지 않고 서버의 특정 폴더에서 관리하고 있는데 이 위치를 제대로 참조하지 못하는 현상이 일어나고 있었다.

  • 서버 에러 로그 파일에서 설정파일을 찾지 못해서 서버가 종료된다.

jenkins가 아닌 내가 직접 ssh로 oci 인스턴스에 접근하여 nohup 명령어를 입력하여 서버를 기동할 때는 정상적으로 동작했고 지금까지는 발생하지 않던 문제였다.

 

현재 jenkins가 어느 경로에서 작업을 하는지 정확하게 알아보기 위해서 jenkins 콘솔에서 jenkins의 현재 위치를 알 수 있도록 출력하였다.

  • jenkins는 /home/opc 에서 작업하고 있다.

현재 서버의 설정 파일의 위치는 /home/opc/properties에 위치하고 있다.

jenkins 위치(/home/opc) 기준으로 설정파일을 찾으면 경로가 어긋나게 된다.

(직접 인스턴스에 접근하여 실행시키는 위치는 /home/opc/prod 이다.)

해결

현재 프로젝트 설정파일을 jar 파일이 아닌 외부 폴더에서 관리하다보니 현재 jenkins가 위치하고 있는 터미널의 위치에 영향을 받는 것 같았다.

jenkins가 기존(/home/opc)에서 작업하고 있던 것을 적절한 위치(/home/opc/prod)에서 작업을 수행할 수 있도록 수정하고 나서는 정상적으로 서버가 기동되는 것을 확인하였다.

 

참고

반응형

+ Recent posts