예약된 파이프라인

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

예약된 파이프라인을 사용하여 GitLab CI/CD 파이프라인을 정기적으로 실행하세요.

사전 요구 사항

예약된 파이프라인이 실행되려면:

  • 스케줄 소유자는 Developer 역할을 가지고 있어야 합니다. 보호된 브랜치의 파이프라인의 경우,
    스케줄 소유자는 브랜치에 병합할 수 있도록 허용 되어야 합니다.
  • .gitlab-ci.yml 파일은 유효한 구문을 가져야 합니다.

그렇지 않으면 파이프라인이 생성되지 않습니다. 오류 메시지가 표시되지 않습니다.

파이프라인 스케줄 추가

파이프라인 스케줄을 추가하려면:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. Build > Pipeline schedules를 선택합니다.
  3. New schedule을 선택하고 양식을 작성합니다.
    • Interval Pattern: 미리 구성된 간격 중 하나를 선택하거나 cron 표기법으로 사용자 정의 간격을 입력합니다.
      모든 cron 값을 사용할 수 있지만, 예약된 파이프라인은 인스턴스의
      최대 예약 파이프라인 빈도보다 더 자주 실행될 수 없습니다.
    • 대상 브랜치 또는 태그: 파이프라인의 브랜치 또는 태그를 선택합니다.
    • 변수: 예약에 대한 CI/CD 변수를 원하는 만큼 추가합니다.
      이 변수는 예약된 파이프라인이 실행될 때만 사용 가능하며,
      다른 파이프라인 실행에서는 사용할 수 없습니다.

프로젝트에 이미 최대 파이프라인 스케줄 수가 있는 경우,
새로 추가하기 전에 사용되지 않는 스케줄을 삭제해야 합니다.

파이프라인 스케줄 편집

파이프라인 스케줄의 소유자는 이를 편집할 수 있습니다:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. Build > Pipeline schedules를 선택합니다.
  3. 스케줄 옆에서 Edit ( )을 선택하고 양식을 작성합니다.

사용자는 프로젝트에 대해 Developer 역할 이상을 갖고 있어야 합니다.
사용자가 스케줄의 소유자가 아닌 경우, 먼저 소유권을 확보해야 합니다.

수동 실행

예약된 파이프라인을 수동으로 트리거하여 다음 예약 시간 대신 즉시 실행할 수 있습니다:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. Build > Pipeline schedules를 선택합니다.
  3. 목록의 오른쪽에서
    실행할 파이프라인에 대해 Run ( )을 선택합니다.

예약된 파이프라인을 수동으로 1분에 한 번 실행할 수 있습니다.

예약된 파이프라인을 수동으로 실행할 때, 파이프라인은
해당 파이프라인을 트리거한 사용자의 권한으로 실행되며,
스케줄 소유자의 권한으로 실행되지 않습니다.

소유권 확보

예약된 파이프라인은 스케줄 소유자의 권한으로 실행됩니다.
파이프라인은 파이프라인 소유자와 동일한 리소스에 접근할 수 있으며,
보호된 환경
CI/CD 작업 토큰을 포함합니다.

다른 사용자가 생성한 파이프라인의 소유권을 확보하려면:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. Build > Pipeline schedules를 선택합니다.
  3. 목록의 오른쪽에서
    소유자가 되고자 하는 파이프라인에 대해 Take ownership를 선택합니다.

다른 사용자가 생성한 파이프라인의 소유권을 확보하려면 최소한 Maintainer 역할이 필요합니다.

관련 주제

문제 해결

파이프라인 일정 작업 시 다음과 같은 문제를 겪을 수 있습니다.

짧은 refs를 전체 refs로 확장

API에 짧은 ref를 제공하면 자동으로 전체 ref로 확장됩니다.

이 동작은 의도된 것이며 명시적인 리소스 식별을 보장합니다.

API는 짧은 refs(예: main)와 전체 refs(예: refs/heads/main 또는 refs/tags/main)를 모두 허용합니다.

모호한 refs

경우에 따라 API는 짧은 ref를 자동으로 전체 ref로 확장할 수 없습니다. 이는 다음과 같은 상황에서 발생할 수 있습니다:

  • 짧은 ref(예: main)를 제공했지만 해당 이름을 가진 브랜치와 태그가 모두 존재하는 경우.
  • 짧은 ref를 제공했지만 해당 이름을 가진 브랜치나 태그가 존재하지 않는 경우.

이 문제를 해결하려면 전체 ref를 제공하여 올바른 리소스가 식별되도록 합니다.

파이프라인 일정 보기 및 최적화

너무 많은 파이프라인이 동시에 시작되면서 발생하는 과도한 부하를 방지하기 위해, 파이프라인 일정을 검토하고 최적화할 수 있습니다.

모든 기존 일정을 개요로 파악하고 이를 더 고르게 분배할 수 있는 기회를 찾으려면:

  1. 다음 명령어를 실행하여 일정 데이터를 추출하고 형식을 지정합니다:

    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
    
  2. 인기 있는 cron 패턴을 식별하기 위해 출력을 검토합니다.

    예를 들어, 매 시간 시작(0 * * * *)에 실행되도록 설정된 많은 일정이 보일 수 있습니다.

  3. 특히 대규모 저장소의 경우, 일정이 고르게 분산되도록 cron 패턴을 조정합니다.

    예를 들어, 매 시간 시작에 여러 일정이 실행되는 대신, 시간 전체에 걸쳐 분산시킵니다(5 * * * *, 15 * * * *, 25 * * * *).