CI/CD Pipelines

파이프라인은 지속적 통합, 제공 및 배포의 최상위 구성 요소입니다.

파이프라인은 다음으로 구성됩니다.

  • 수행할 작업을 정의하는 Jobs. 예를 들어, 코드를 컴파일하거나 테스트하는 작업.
  • 작업을 실행할 시기를 정의하는 Stages. 예를 들어, 코드를 컴파일하는 단계 후에 테스트를 실행하는 단계.

Job은 러너에 의해 실행됩니다. 동시(concurrent) 러너가 충분한 경우, 동일한 단계의 여러 작업이 병렬로 실행됩니다.

한 단계의 모든 작업이 성공하면, 파이프라인은 다음 단계로 넘어갑니다.

한 단계의 어떤 작업이 실패하면, 다음 단계는 (일반적으로) 실행되지 않고 파이프라인이 일찍 종료됩니다.

일반적으로 파이프라인은 자동으로 실행되며 생성된 후에는 개입이 필요하지 않습니다. 그러나 수동으로 파이프라인과 상호 작용할 수 있는 경우도 있습니다.

일반적인 파이프라인은 다음 순서로 실행되는 네 개의 단계로 구성될 수 있습니다.

  • compile이라는 작업이 있는 build 단계
  • test1test2이라는 두 개의 작업이 있는 test 단계
  • deploy-to-stage라는 직업이 있는 staging 단계
  • deploy-to-prod라는 직업이 있는 production 단계

파이프라인 보기

프로젝트의 CI/CD > Pipelines 페이지에서 현재 및 이전 파이프라인 실행을 찾을 수 있습니다. 또한 Merge 요청의 Pipelines 탭으로 이동하여 Merge 요청을 위한 파이프라인에 액세스할 수도 있습니다.

GitLab 파이프라인 보기 | 인포그랩 GitLab

파이프라인을 클릭하여 Pipeline Details 페이지를 열고 해당 파이프라인에 대해 실행된 Job을 표시합니다. 여기에서 실행 중인 파이프라인을 취소하거나 실패한 파이프라인에서 Job을 다시 시도하거나 파이프라인을 삭제할 수 있습니다.

GitLab 12.3부터, 특정 브랜치의 마지막 커밋에 대한 최신 파이프라인의 링크는 /project/pipelines/[branch]/latest에서 사용할 수 있습니다. 또한 /project/pipelines/latest는 프로젝트의 기본 브랜치에 대한 마지막 커밋의 최신 파이프라인으로 리디렉션합니다.

GitLab 13.0부터 다음을 기준으로 파이프라인 목록을 필터링할 수 있습니다.

  • 트리거 작성자
  • 브랜치 이름
  • 상태 (GitLab 13.1 이상)
  • 태그 (GitLab 13.1 이상)

수동으로 파이프라인 실행

파이프라인은 사전 정의되거나 수동으로 지정된 변수를 사용하여 수동으로 실행할 수 있습니다.

파이프라인의 정상적인 작동 범위 외부에서 파이프라인의 결과(예 : 코드 빌드)가 필요한 경우 이 작업을 수행할 수 있습니다.

파이프라인을 수동으로 실행하려면 :

  1. 프로젝트의 CI/CD > Pipelines로 이동합니다.
  2. Run Pipeline 버튼을 클릭합니다.
  3. Run Pipeline 페이지에서 :
    a. Run for 필드에서 파이프라인을 실행할 브랜치를 선택합니다.
    b. 파이프라인 실행에 필요한 환경 변수를 입력합니다.
    c. Run Pipeline 버튼을 클릭합니다.

이제 파이프라인은 구성된 대로 Job을 실행합니다.

URL 쿼리 문자열을 사용하여 파이프라인 실행

쿼리 문자열을 사용하여 Run Pipeline 페이지를 미리 채울 수 있습니다. 예를 들어, 쿼리 문자열 .../pipelines/new?ref=my_branch&var[foo]=bar&file_var[file_foo]=file_bar은 다음으로 Run Pipeline 페이지를 미리 채웁니다.

  • Run for 필드 : my_branch
  • Variables 섹션 :
    • Variable :
      • Key : foo
      • Value : bar
    • File :
      • Key : file_foo
      • Value : file_bar

pipelines/new URL 형식은 다음과 같습니다.

.../pipelines/new?ref=<branch>&var[<variable_key>]=<value>&file_var[<file_key>]=<value>

다음 매개 변수가 지원됩니다.

  • ref : Run for 필드를 채울 브랜치 지정
  • var : Variable 변수 지정
  • file_var : File 변수 지정

var 또는 file_var에 대해 키와 값이 필요합니다.

파이프라인에 수동 상호작용 추가

when:manual 키워드를 사용하여 구성된 수동 작업(Manual action)을 사용하면 파이프라인에서 진행하기 전에 수동 상호작용을 요구할 수 있습니다.

파이프라인 그래프에서 바로 이 작업을 수행할 수 있습니다. 특정 Job을 실행하려면 재생 버튼을 클릭하기만 하면 됩니다.

예를 들어, 파이프라인이 자동으로 시작될 수 있지만, 프로덕션에 배포하려면 수동 작업이 필요합니다. 아래 예에서, production 스테이지에는 수동 작업이 있는 Job이 있습니다.

GitLab 파이프라인 production Job | 인포그랩 GitLab

한 단계에서 여러 수동 작업 시작

"Play all manual" 버튼을 사용하여 단일 단계에서 여러 수동 작업을 동시에 시작할 수 있습니다. 이 버튼을 클릭하면 각 개별 수동 작업이 트리거 되고 업데이트된 상태로 새로 고쳐집니다.

이 기능은 다음에서만 사용할 수 있습니다.

  • 최소한 Developer 액세스 권한이 있는 사용자의 경우
  • 단계에 수동 작업이 포함된 경우

파이프라인 삭제

프로젝트에서 Owner 권한이 있는 사용자는 CI/CD > Pipelines에서 파이프라인을 클릭하여 Pipeline Details 페이지로 이동한 다음, Delete 버튼을 사용하여 파이프라인을 삭제할 수 있습니다.

GitLab 파이프라인 삭제 | 인포그랩 GitLab

주의 : 파이프라인을 삭제하면 모든 파이프라인 캐시가 만료되고, 빌드, 로그, 아티팩트 및 트리거와 같은 모든 관련 객체가 삭제됩니다. 이 작업은 취소할 수 없습니다.

파이프라인 할당량(quota)

각 사용자에게는 모든 개인 프로젝트에서 공유 러너의 사용량을 추적하는 개인 파이프라인 할당량이 있습니다. 각 그룹에는 그룹 내에서 생성된 모든 프로젝트의 공유 러너 사용을 추적하는 사용 할당량(usage quota)이 있습니다.

파이프라인이 트리거 되면, 누가 트리거 했는지에 관계없이 프로젝트 Owner의 네임스페이스에 대한 파이프라인 할당량이 사용됩니다. 이 경우 네임스페이스는 프로젝트를 소유 한 사용자 또는 그룹일 수 있습니다.

파이프라인 기간 계산 방법

주어진 파이프라인의 총 실행 시간은 재시도 및 보류(대기) 시간을 제외합니다.

각 Job은 Period로 표시되며 다음으로 구성됩니다.

  • Period#first (Job이 시작되었을 때)
  • Period#last (Job이 끝났을 때)

간단한 예는 다음과 같습니다.

  • A (1, 3)
  • B (2, 4)
  • C (6, 7)

예에서 :

  • A는 1에서 시작하여 3에서 끝납니다.
  • B는 2에서 시작하여 4에서 끝납니다.
  • C는 6에서 시작하여 7에서 끝납니다.

시각적으로 다음과 같이 볼 수 있습니다.

0 1 2 3 4 5 6 7
AAAAAAA
BBBBBBB
CCCC

A, B, C의 합집합은 (1, 4)와 (6, 7)입니다. 따라서 총 실행 시간은 다음과 같습니다.

(4 - 1) + (7 - 6) => 4

보호된 브랜치에 대한 파이프라인 보안

파이프라인이 보호된 브랜치에서 실행될 때 엄격한 보안 모델이 적용됩니다.

사용자가 해당 특정 브랜치에 병합 또는 푸시할 수 있는 경우에만 보호된 브랜치에서 다음 작업이 허용됩니다.

  • 수동 파이프라인 실행 (웹 UI 또는 파이프라인 API 사용)
  • 예약된 파이프라인 실행
  • 트리거를 사용하여 파이프라인 실행
  • On-demand DAST 스캔 실행
  • 기존 파이프라인에서 수동 작업 트리거
  • 기존 Job 재시도 또는 취소 (웹 UI 또는 파이프라인 API 사용)

보호됨으로 표시된 변수는 보호된 브랜치에서 실행되는 Job에만 액세스할 수 있으므로, 신뢰할 수 없는 사용자가 배포 자격 증명 및 토큰과 같은 중요한 정보에 의도치 않게 액세스하는 것을 방지합니다.

보호됨으로 표시된 러너는 보호된 브랜치에서만 Job을 실행할 수 있으므로, 신뢰할 수 없는 코드가 보호된 러너에서 실행되는 것을 방지하고 배포 키와 다른 자격 증명이 실수로 액세스되지 않도록 보호할 수 있습니다. 보호된 러너에서 실행되도록 의도된 Job이 일반 러너를 사용하지 않도록 하려면 그에 따라 태그를 지정해야 합니다.

깃랩 문서 바로가기