Jenkins Build periodically 스케줄 문법과 H 키워드
Build periodically
섹션 제목: “Build periodically”Jenkins는 플러그인으로 빌드·테스트·배포 과정을 자동화하는 오픈 소스 CI 도구다. 잡 설정의 Build Triggers 항목에서 Build periodically를 체크하면 Schedule 입력 칸이 열린다. 여기에 시간을 적으면 그 시간마다 빌드가 돈다.
기본 문법
섹션 제목: “기본 문법”문법은 Linux crontab과 거의 같다. 한 줄에 다섯 필드를 탭이나 공백으로 구분해 적는다(Jenkins 도움말).
MINUTE HOUR DOM MONTH DOW| 필드 | 의미 | 범위 |
|---|---|---|
MINUTE |
분 | 0-59 |
HOUR |
시 | 0-23 |
DOM |
일 | 1-31 |
MONTH |
월 | 1-12 |
DOW |
요일 | 0-7 (0과 7이 일요일) |
한 필드에 여러 값을 넣는 연산자는 다음과 같다.
*: 모든 값M-N: 범위M-N/X,*/X: 범위 또는 전체에서 X 간격A,B,...,Z: 값 나열
빈 줄과 #으로 시작하는 줄은 주석으로 무시한다.
H 키워드
섹션 제목: “H 키워드”H(hash)는 범위 안의 값 하나를 고르는 기호다. 무작위처럼 보이지만 잡 이름의 해시로 정하므로 같은 잡에서는 값이 바뀌지 않는다.
여러 잡을 0 0 * * *로 걸면 모두 자정에 동시에 돌아 서버 부하가 한 시점에 몰린다. H H * * *로 걸면 각 잡이 하루 한 번씩 돌되 실행 시각이 잡마다 흩어진다. 그래서 Jenkins 도움말은 가능한 곳마다 H를 쓰라고 권한다.
H(a-b): 범위 안에서 해시로 고른다.H H(0-7) * * *는 0시부터 7시 59분 사이 어느 한 시각이다.H/X: 해시로 정한 시작점에서 X 간격으로 돈다.H/15 * * * *는 15분마다 돌고, 실제 분은 잡마다 다르다(예: 7, 22, 37, 52분).- 일(
DOM) 필드의 해시는 항상 1-28 범위에서 고른다. 월마다 일수가 달라*/3,H/3같은 짧은 주기는 월말에 간격이 고르지 않다.
@yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly를 쓸 수 있다. 별칭도 해시로 시각을 분산한다. @hourly는 H * * * *와 같고, @midnight는 0시부터 2시 59분 사이 어느 시각이다.
# 매 분* * * * *
# 10분마다H/10 * * * *
# 매일 3시 0분부터 30분까지 매 분 (하루 31번)0-30 3 * * *
# 매월 10일과 11일, 5시부터 7시 사이에 30분마다H/30 5,6,7 10-11 * *
# 매시 15분부터 45분 사이에 10분 간격H(15-45)/10 * * * *
# 토요일과 일요일, 9시부터 15시까지 2시간마다 (9, 11, 13, 15시)H 9-16/2 * * 6-7
# 1월을 빼고 매달 1일과 15일에 한 번H H 1,15 2-12 *0-30 3 * * *처럼 분 필드에 범위를 그대로 쓰면 범위 안의 매 분마다 돈다. 범위 안에서 한 번만 돌리려면 H(0-30) 3 * * *로 쓴다.
시간대 지정
섹션 제목: “시간대 지정”스케줄은 기본으로 Jenkins 컨트롤러 JVM의 시간대를 따른다. 다른 시간대로 돌리려면 입력 칸의 첫 줄에 TZ=와 시간대 ID를 적는다. TZ= 줄 다음 줄부터 스케줄을 쓴다.
TZ=Asia/Seoul# 서울 시간 20시대에 한 번H 20 * * *쓸 수 있는 시간대 ID는 Jenkins가 도는 Java 런타임에 따라 다르다.
무거운 잡은 새벽에 돌린다
섹션 제목: “무거운 잡은 새벽에 돌린다”빌드처럼 무거운 잡은 출근 전 새벽 시간대에 범위를 주고 H로 흩어 돌린다. 시각은 해시가 고르므로 잡이 여러 개여도 같은 시각에 몰리지 않는다.
# 매일 0시부터 6시 59분 사이 어느 한 시각H H(0-6) * * *