예약된 파이프라인
일정한 간격으로 GitLab CI/CD 파이프라인을 실행하는 예약된 파이프라인을 사용합니다.
전제 조건
예약된 파이프라인을 실행하려면:
- 일정 소유자는 개발자 역할을 가져야 합니다. 보호된 브랜치의 경우, 일정 소유자는 브랜치에 합병할 수 있는 권한 이 있어야 합니다.
-
.gitlab-ci.yml
파일은 유효한 구문을 가져야 합니다.
그렇지 않으면 파이프라인이 생성되지 않습니다. 오류 메시지가 표시되지 않습니다.
파이프라인 스케줄 추가
파이프라인 스케줄을 추가하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인 스케줄를 선택합니다.
-
새 스케줄을 선택하고 양식을 작성합니다.
- 간격 패턴: 사전 구성된 간격 중 하나를 선택하거나 사용자 정의 간격을 cron 표기법으로 입력합니다. 모든 cron 값을 사용할 수 있지만 예약된 파이프라인은 인스턴스의 최대 예약된 파이프라인 빈도 보다 더 자주 실행할 수 없습니다.
- 대상 브랜치 또는 태그: 파이프라인의 브랜치 또는 태그를 선택합니다.
- 변수: 스케줄에 CI/CD 변수를 원하는 만큼 추가합니다. 이러한 변수는 예약된 파이프라인이 실행될 때만 사용되며, 다른 파이프라인 실행에는 사용되지 않습니다.
프로젝트가 이미 파이프라인 스케줄의 최대 개수에 도달한 경우, 다른 스케줄을 추가하기 전에 사용되지 않는 스케줄을 삭제해야 합니다.
파이프라인 스케줄 편집
파이프라인 스케줄 소유자는 편집할 수 있습니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인 스케줄를 선택합니다.
- 스케줄 옆에서 편집 ()을 선택하고 양식을 작성합니다.
사용자는 프로젝트의 개발자 역할 이상을 가져야 합니다. 사용자가 일정의 소유자가 아닌 경우, 먼저 소유권을 가져와야합니다.
수동 실행
파이프라인 스케줄을 수동으로 트리거하여 즉시 실행되도록하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인 스케줄를 선택합니다.
- 목록에서 원하는 파이프라인 옆에 있는 실행 ()을 선택합니다.
예약된 파이프라인을 수동으로 실행하면 파이프라인이 트리거한 사용자의 권한으로 실행되며, 일정 소유자의 권한으로 실행되지 않습니다.
소유권 가져오기
예약된 파이프라인은 일정 소유자의 권한으로 실행됩니다. 파이프라인은 일정 소유자가 소유하는 것과 동일한 리소스에 액세스할 수 있습니다. 보호된 환경 및 CI/CD 작업 토큰을 포함하여입니다.
다른 사용자가 만든 파이프라인의 소유권을 가져오려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인 스케줄를 선택합니다.
- 목록에서 소유권을 가져오고 싶은 파이프라인 옆에 있는 소유권 가져오기를 선택합니다.
다른 사용자가 만든 파이프라인의 소유권을 가져오려면 최소한 Maintainer 역할을 가져야 합니다.
관련 주제
문제 해결
파이프라인 스케줄을 처리하는 동안 다음과 같은 문제점을 마주칠 수 있습니다.
단축 ref가 전체 ref로 확장됨
API에 짧은 ref
를 제공하면 자동으로 전체 ref
로 확장됩니다.
이 동작은 명시적인 리소스 식별을 보장하는 의도된 동작입니다.
API는 짧은 ref(예: main
) 및 전체 ref(예: refs/heads/main
또는 refs/tags/main
)를 모두 허용합니다.
모호한 ref
어떤 경우에는 API가 짧은 ref
를 자동으로 전체 ref
로 확장하지 못할 수 있습니다. 이는 다음과 같은 경우에 발생할 수 있습니다:
- 짧은
ref
를 제공하지만 해당 이름의 브랜치 및 태그 두 가지가 모두 존재하는 경우. - 짧은
ref
를 제공했지만 해당 이름의 브랜치 또는 태그가 존재하지 않는 경우.
이 문제를 해결하려면 올바른 리소스가 식별되도록 전체 ref
를 제공하십시오.
파이프라인 스케줄 보기 및 최적화
너무 많은 파이프라인이 동시에 시작되어 과도한 부하가 발생하는 것을 방지하려면 파이프라인 스케줄을 검토하고 최적화할 수 있습니다.
모든 기존 스케줄의 개요를 얻고 더 공정하게 분배할 수 있는 기회를 식별하려면 다음 명령을 실행하세요:
outfile=/tmp/gitlab_ci_schedules.tsv
sudo gitlab-psql --command "
COPY (SELECT
ci_pipeline_schedules.cron,
projects.path AS project,
users.email
FROM ci_pipeline_schedules
JOIN projects ON projects.id = ci_pipeline_schedules.project_id
JOIN users ON users.id = ci_pipeline_schedules.owner_id
) TO '$outfile' CSV HEADER DELIMITER E'\t' ;"
sort "$outfile" | uniq -c | sort -n
출력을 검토하여 인기 있는 cron
패턴을 식별하세요.
예를 들어, 각 시간의 시작에서 자주 실행되도록 계획된 많은 스케줄을 볼 수 있습니다(0 * * * *
).
특히 대형 저장소의 경우 여러 스케쥴이 한 시간의 시작에서 실행될 때 분배하는 cron 패턴을 조정하세요.
예를 들어, 한 시간의 시작에서 여러 스케쥴이 실행되는 대신 시간 동안 분배하세요(5 * * * *
, 15 * * * *
, 25 * * * *
).