예약 파이프라인
예약 파이프라인 (Scheduled pipelines)
코드 변경이 없어도 정해진 시간마다 파이프라인을 돌리고 싶을 때가 있어요. GitLab의 예약 파이프라인(pipeline schedule)은 cron 패턴을 기반으로 일정한 간격마다 파이프라인을 실행해 줍니다. 배포 상태를 최신으로 유지하거나 주기적인 유지보수 같은 작업에 딱 맞죠. 이 글에서 예약 파이프라인을 만들고, 수정하고, 수동 실행하고, 소유권을 넘기는 방법을 설명할게요.
출처: 문서
본문
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
cron 패턴을 기반으로 일정한 간격마다 파이프라인을 실행하도록 예약을 만들 수 있어요. 코드 변경에 의해 트리거되기보다 시간 기반 일정으로 실행해야 하는 작업에 파이프라인 예약을 사용하세요.
커밋이나 머지 리퀘스트로 트리거되는 파이프라인과 달리, 예약 파이프라인은 코드 변경과 독립적으로 실행됩니다. 그래서 배포를 최신으로 유지하거나 주기적 유지보수를 수행하는 것처럼 개발 활동과 무관하게 일어나야 하는 작업에 적합해요.
프로젝트나 그룹이 삭제 대상으로 표시되면 예약 파이프라인 실행이 멈춥니다.
파이프라인 예약 만들기
History
- Inputs 옵션이 GitLab 17.11에서 도입됐어요.
파이프라인 예약을 만들면 그 예약의 소유자(owner)가 돼요. 파이프라인은 당신의 권한으로 실행되며, 당신의 접근 수준에 따라 보호된 환경에 접근하고 CI/CD job 토큰을 사용할 수 있습니다.
전제 조건:
- 프로젝트에 대해 Developer, Maintainer 또는 Owner 역할이 있어야 해요.
- 기본 이메일 주소가 인증되어 있어야 해요.
- 보호된 브랜치를 대상으로 하는 예약은 대상 브랜치에 대한 머지 권한이 있어야 해요.
.gitlab-ci.yml파일이 유효한 구문이어야 해요. 예약 전에 구성을 검증할 수 있습니다.
파이프라인 예약을 만들려면:
-
상단 바에서
Search or go to를 선택해 프로젝트를 찾으세요. -
왼쪽 사이드바에서 Build > Pipeline schedules를 선택하세요.
-
New schedule을 선택하세요.
-
필드를 채우세요.
-
Interval Pattern: 사전 구성된 간격을 선택하거나 cron 표기법으로 커스텀 간격을 입력하세요. 어떤 cron 값이든 사용할 수 있지만, 예약 파이프라인은 인스턴스의 최대 예약 파이프라인 빈도보다 더 자주 실행될 수 없어요.
-
Target branch or tag: 파이프라인의 브랜치 또는 태그를 선택하세요.
-
Inputs: 파이프라인의
spec:inputs섹션에 정의된 inputs 값을 설정하세요. 이 입력 값은 예약 파이프라인이 실행될 때마다 사용됩니다. 예약 하나는 최대 20개의 입력을 가질 수 있어요. -
Variables: 예약에 원하는 만큼 CI/CD 변수를 추가하세요. 이 변수들은 예약 파이프라인이 실행될 때만 사용할 수 있고, 다른 파이프라인 실행에서는 사용할 수 없어요. 변수보다는 inputs를 파이프라인 구성에 권장하는데, 보안과 유연성에서 더 좋기 때문입니다.
프로젝트가 최대 파이프라인 예약 수에 도달했다면, 다른 예약을 추가하기 전에 사용하지 않는 예약을 삭제하세요.
파이프라인 예약 수정하기
전제 조건:
- 예약의 소유자이거나 예약의 소유권을 가져와야 해요.
- 프로젝트에 대해 Developer, Maintainer 또는 Owner 역할이 있어야 해요.
- 보호된 브랜치를 대상으로 하는 예약은 대상 브랜치에 대한 머지 권한이 있어야 해요.
- 보호된 태그에서 실행되는 예약은 보호된 태그를 만들 수 있어야 해요.
파이프라인 예약을 수정하려면:
- 상단 바에서
Search or go to를 선택해 프로젝트를 찾으세요. - 왼쪽 사이드바에서 Build > Pipeline schedules를 선택하세요.
- 예약 옆에서 Edit을 선택하세요.
- 변경을 마친 뒤 Save changes를 선택하세요.
수동으로 실행하기
예약 파이프라인은 분당 한 번씩 수동으로 실행할 수 있어요. 예약 파이프라인을 수동으로 실행하면 예약 소유자의 권한이 아니라 당신의 권한을 사용합니다.
다음 예약 시간을 기다리는 대신 즉시 예약을 트리거하려면:
- 상단 바에서
Search or go to를 선택해 프로젝트를 찾으세요. - 왼쪽 사이드바에서 Build > Pipeline schedules를 선택하세요.
- 예약 옆에서 Run을 선택하세요.
소유권 가져오기
원래 소유자가 없어져서 파이프라인 예약이 비활성화됐다면 소유권을 가져올 수 있어요.
예약 파이프라인은 예약을 소유한 사용자의 권한으로 실행됩니다.
전제 조건:
- 프로젝트에 대해 Maintainer 또는 Owner 역할이 있어야 해요.
예약의 소유권을 가져오려면:
- 상단 바에서
Search or go to를 선택해 프로젝트를 찾으세요. - 왼쪽 사이드바에서 Build > Pipeline schedules를 선택하세요.
- 예약 옆에서 Take ownership을 선택하세요.
내 예약 파이프라인 보기
History
- GitLab 18.4에서 도입됐어요.
모든 프로젝트에서 자신이 소유한 활성 파이프라인 예약을 보려면:
- 오른쪽 위에서 아바타를 선택하세요.
- Edit profile을 선택하세요.
- Account를 선택하세요.
- Scheduled pipelines you own까지 스크롤하세요.
관련 주제
문제 해결
파이프라인 예약을 사용할 때 다음과 같은 문제를 만날 수 있어요.
예약 파이프라인이 비활성화됨
예약 파이프라인 상태가 예기치 않게 Inactive로 바뀌면, 예약 소유자가 차단되었거나 프로젝트에서 제거됐을 수 있어요.
예약의 소유권을 가져와 다시 활성화하세요.
시스템 부하를 막기 위해 예약 파이프라인 분산
너무 많은 파이프라인이 동시에 시작되어 과도한 부하가 생기는 것을 막으려면 예약 구성을 검토하고 분산하세요.
이 명령을 실행해 예약 데이터를 추출하고 형식화하세요.
outfile=/tmp/gitlab_ci_schedules.tsv
sudo gitlab-psql --command "
COPY (SELECT
ci_pipeline_schedules.cron,
ci_pipeline_schedules.cron_timezone,
namespaces.path AS group,
projects.path AS project,
users.email
FROM ci_pipeline_schedules
JOIN projects ON projects.id = ci_pipeline_schedules.project_id
JOIN namespaces ON namespaces.id = projects.namespace_id
JOIN users ON users.id = ci_pipeline_schedules.owner_id
WHERE ci_pipeline_schedules.active = 't'
) TO '$outfile' CSV HEADER DELIMITER E'\t' ;"
sort "$outfile" | uniq -c | sort -n
출력을 검토해 인기 있는 cron 패턴을 파악하세요. 예를 들어 매시간 시작(0 * * * *)에 많은 예약이 몰려 있을 수 있어요.
특히 대규모 저장소에서는 cron 패턴을 분산하도록 예약을 조정하세요. 예를 들어 매시간 시작에 여러 예약을 두는 대신 시간 내내 분산 배치하세요(5 * * * *, 15 * * * *, 25 * * * *).
더 알아보기 (Learn more)
예약 파이프라인에서 어떤 job을 실행할지 조건을 걸고 싶다면 예약 파이프라인용 job 실행 문서를, cron 문법을 더 자세히 알고 싶다면 cron 문서를 참고하세요. API로 일정을 관리하려면 파이프라인 예약 API도 함께 보면 좋아요.