개발은 재밌어야 한다
article thumbnail

Jenkins는 CI/CD 파이프라인 자동화를 위한 강력한 도구입니다. 그중에서도 주기적 빌드 설정은 배치 작업이나 테스트 자동화를 위해 자주 사용됩니다. 이번 글에서는 Jenkins에서 주기적 빌드를 설정하는 방법과 크론식(Cron Expression)을 활용하는 방법을 알아보겠습니다.


Jenkins 주기적 빌드란?

Jenkins의 Build periodically 옵션은 특정 시간 간격으로 자동 빌드를 실행하도록 설정할 수 있는 기능입니다. 반복적인 작업을 자동화함으로써 개발자와 운영자의 생산성을 높이는 데 필수적입니다.


크론식(Cron Expression) 기초

Jenkins는 빌드 주기를 설정할 때 크론식을 사용합니다. 크론식은 다음과 같은 5개의 필드로 구성됩니다:

필드 순서값의 범위의미

1분 0-59
2시간 0-23 시간
3일 1-31
4월 1-12 (또는 Jan-Dec)
5요일 0-7 (0과 7은 일요일) 요일

크론식 예제

다양한 빌드 주기 설정 예제를 통해 쉽게 이해해보겠습니다:

크론식빌드 실행 주기

H/3 * * * * 매 3분마다
0 12 * * * 매일 정오(12:00)
0 18 * * 1-5 평일 오후 6시(월-금)
0 0 1 * * 매월 1일 자정
0 0 * * 0 매주 일요일 자정

 

H 사용 이유
H는 Jenkins에서 해시 기반 분산을 의미합니다. 이를 사용하면 특정 분(또는 시간)마다 실행되지만 프로젝트마다 시작 시간이 분산되어 과부하를 방지합니다.
예: H/3은 매 3분마다 실행되며, 각 프로젝트가 같은 시점에 실행되지 않도록 설정됩니다.

 

H가 필요한 이유

H는 Jenkins가 각 빌드의 실행 시간을 자동으로 분산시킬 수 있도록 도와주는 특수한 예약 표현입니다. 이를 사용하는 이유는 다음과 같습니다:

  1. 빌드 충돌 방지
    여러 프로젝트가 동시에 빌드를 시작하면 Jenkins Master와 Slave 노드에 부하가 발생합니다. 특히, 빌드 주기를 */n처럼 설정하면 모든 프로젝트가 같은 시점(예: 0분, 3분, 6분 등)에 실행됩니다.
    하지만 H/n를 사용하면 Jenkins가 각 프로젝트에 대해 고유한 시작 시점을 계산하여, 부하를 균등하게 분산시킬 수 있습니다.
  2. 환경 특성에 최적화
    H는 Jenkins가 프로젝트 이름, 노드 정보 등을 기반으로 내부 해시값을 계산하여 시작 시점을 결정합니다. 이 방식은 프로젝트 수와 Jenkins 서버의 상태를 고려하므로, 단순한 시간 간격 분배보다 효율적입니다.
  3. 유지 관리 편의성
    관리자가 명시적으로 특정 분을 지정하지 않아도 되기 때문에 설정이 간결해집니다. Jenkins가 자동으로 각 프로젝트의 적절한 시점을 계산하므로 관리 복잡도를 줄일 수 있습니다.

H의 작동 방식

H는 Jenkins가 프로젝트를 기준으로 내부 해시 값을 생성하여 시작 시점을 동적으로 계산합니다. 이 해시 값은 다음과 같은 요소들을 기반으로 생성됩니다:

  • 프로젝트 이름
  • 빌드 파이프라인 ID
  • 워크스페이스 경로

Jenkins는 이러한 정보를 사용하여 매번 일관된 해시값을 계산합니다. 따라서 프로젝트 이름이 변경되지 않는 한, H의 값도 동일하게 유지됩니다.


실제 설정 방법

  1. Jenkins Dashboard에서 프로젝트로 이동합니다.
  2. Build Triggers 섹션으로 스크롤합니다.
  3. Build periodically 체크박스를 선택합니다.
  4. 원하는 크론식을 입력합니다.


주의사항

  • 과부하 방지: 짧은 주기로 설정된 빌드는 Jenkins Master와 Slave 노드에 부하를 줄 수 있으니 주기를 적절히 설정하세요.
  • 빌드 실패 관리: 주기적 빌드에서 잦은 실패는 로그 디스크 용량을 빠르게 소모할 수 있습니다.
  • 분산 빌드 사용: 여러 프로젝트가 같은 시간에 빌드되지 않도록 H를 사용하는 것을 권장합니다.

'CS' 카테고리의 다른 글

동기와 비동기의 개념과 차이  (0) 2021.04.16
프로세스와 스레드의 차이  (0) 2021.03.18
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!