티스토리 뷰
Spring Batch 를 통해 Batch Job을 만들었으면 이걸 주기적으로 돌려주는 무언가가 필요하다. 배치와 스케쥴러를 혼동하는 사람들이 종종 있는데 이것은 완전히 다른 개념이다. 배치는 실시간으로 처리를 하는것이 아닌 일괄 처리를 뜻하며 보통은 특정 시간에 행해진다. 이 특정 시간을 정의해 주는 것은 스케쥴러의 역할이다.
내가 만든 Batch Job을 어느 스케쥴러를 통해서 동작시킬지 먼저 결정을 해야 한다. 선택을 할수 있는건 다음과 같았다.
- 상용으로 나온 배치 전문 솔루션 Control-M
- Jenkins의 Schedule(Build Periodically)를 사용하는 방법
- Quartz 를 사용해서 자체 제작하는 방법
- 배치 어플리케이션이 올라갈 서버(linux)의 crontab 을 사용하는 방법
각각의 장단이 있지만 무난한 Jenkins의 Schedule(Build Periodically)를 사용하기로 했고 이에 대해 알아보자. (매우간단)
일단 배치를 구동시킬 Jenkins를 하나 설치하고 (있다면 별도의 tab에 만들어도 무관하다.) 새로운 ITEM을 누른다. 그리고 FreeStyle Project 로 새 Jenkins Job을 생성을 해준다.
그다음 빌드 유발에서 Build periodically 를 선택하고 Schedule 을 넣어준다. 여기서 Schedule은 Cron Expression으로 넣어준다. Cron Expression 은 다음에서 참고한다.
위와 같이 설정했다면 이건 매일 낮 12시 5분에 이 Jenkins Job을 실행시킨다는 것이다.
스케쥴링의 요소인 "언제 무엇을" 중에 '언제'에 해당하는건 세팅이 끝난것이다.
'무엇을'에 해당하는 부분은 다음과 같다.
이런식으로 Build 에서 무엇을에 해당하는 부분을 기술해준다. 이곳 Command에서는 미리 정의해놓은 sh 파일이 있다면 그걸 실행시켜 주면 되고 아니라면 위처럼 직접 실행 명령을 기술해주면 된다. 실행 명령을 기술하는건 다음 포스팅을 참고하면 된다.
즉 위처럼 구성을 했을 경우에는 tasklet-job이라는 job을 매일 오후 12시 5분에 실행한다는 뜻이다.
배치 Job 별로 Jenkins의 Job도 각각 만들어 주는것을 추천한다. (배치 돌리는 시간이 다 다를것이기 때문에..)
Jenkins의 Job을 각각 다 만든다 하더라도 Job의 이름과 Build > Command에서 export JOB_ID 부분만 해당 Batch Job ID로 바꿔주면 되기 때문에 큰 어려움은 없다.
이렇게 만들었다면 직접 실행해볼수도 있고 시간이 되기를 기다렸다가 실행되는걸 볼수도 있다.
실행 결과는 Jenkins의 Console Log를 통해서 볼수 있고 정상수행 했으면 Success 가 된걸 확인할 수 있다.
별도의 배치 관리 프로그램을 만들지 않더라도 간단하게 이력조회를 할수도 있고 배치가 실패하면 설정해놓은 slack이나 email로 즉시 알람을 받아 볼수도 있어서 Jenkins를 통한 배치 스케쥴링은 매우 편리하다.
끝!
'CI,CD > Jenkins' 카테고리의 다른 글
Jenkins에서 Build FAILURE 시 특정 위치에 로그 남기기 (0) | 2020.06.16 |
---|---|
Nexus에 deploy하고 Jenkins에서 deploy 된 목록 가지고 오기 (0) | 2020.06.11 |
jenkins에서 svn tag를 이용해 build 하기 (0) | 2020.05.28 |
Jenkins에 Sonarqube 연동하기 (0) | 2020.05.18 |
Jenkins에 JaCoCo 연동하기 (0) | 2020.04.29 |