CI/CD 파이프라인
파이프라인은 지속적 통합, 배포 및 배포의 최상위 구성 요소입니다.
파이프라인은 다음으로 구성됩니다:
- 무엇을 하는 작업들을 정의하는 작업(Job). 예를 들어, 코드를 컴파일하거나 테스트하는 작업들입니다.
- 언제 작업들을 실행할지를 정의하는 스테이지(Stage). 예를 들어, 코드를 컴파일하는 스테이지 이후에 테스트를 실행하는 스테이지들입니다.
여러 작업이 동시에 실행되도록 여러 작업이 한 스테이지에 있습니다.
한 스테이지의 모든 작업이 성공하면, 파이프라인은 다음 스테이지로 이동합니다.
한 스테이지의 어떤 작업이라도 실패하면, 다음 스테이지는 (보통) 실행되지 않고 파이프라인은 일찍 종료됩니다.
일반적으로 파이프라인은 자동으로 실행되며 생성된 후에는 개입이 필요하지 않습니다. 그러나 때로는 수동으로 파이프라인과 상호 작용할 수 있습니다.
전형적인 파이프라인은 다음 순서대로 실행될 수 있습니다:
-
build
스테이지, 그 안에compile
이라는 작업이 있습니다. -
test
스테이지, 그 안에test1
및test2
라고 하는 두 작업이 있습니다. -
staging
스테이지, 그 안에deploy-to-stage
라는 작업이 있습니다. -
production
스테이지, 그 안에deploy-to-prod
라는 작업이 있습니다.
파이프라인 유형
파이프라인은 다양한 방법으로 구성될 수 있습니다:
- 기본 파이프라인은 각 스테이지에서 모든 작업을 동시에 실행한 후 다음 스테이지로 넘어갑니다.
- 유향 비순환 그래프(DAG) 파이프라인은 작업 간의 관계에 기반하여 기본 파이프라인보다 빠르게 실행될 수 있습니다.
- 병합 요청 파이프라인은 병합 요청에서만 실행됩니다(모든 커밋에 대해 실행되지 않음).
- 병합된 결과 파이프라인은 소스 브랜치의 변경 사항이 대상 브랜치로 이미 병합된 것처럼 작동하는 병합 요청 파이프라인입니다.
- 병합 트레인은 병합 된 결과 파이프라인을 사용하여 하나를 또 다른 것 뒤에 대기열에 넣습니다.
- 상위-하위 파이프라인은 복잡한 파이프라인을 여러 하위 서브 파이프라인을 트리거할 수 있는 하나의 상위 파이프라인으로 분해하며, 이는 주로 모노 레포지토리에 사용됩니다.
- 다중 프로젝트 파이프라인은 서로 다른 프로젝트의 파이프라인을 결합합니다.
파이프라인 구성
각 프로젝트의 CI/CD 파이프라인 구성 파일에서 파이프라인 및 구성 요소 작업 및 스테이지가 정의됩니다.
CI 파이프라인 파일의 구성 옵션 목록은 CI/CD YAML 구문 참조를 참조하세요.
또한 GitLab UI를 통해 파이프라인의 특정 측면을 구성할 수도 있습니다. 예를 들어:
- 각 프로젝트의 파이프라인 설정.
- 파이프라인 스케줄.
- 사용자 정의 CI/CD 변수.
러너를 위한 Ref 스펙
러너가 파이프라인 작업을 선택할 때 GitLab은 그 작업의 메타데이터를 제공합니다. 이는 귀하의 프로젝트 저장소에서 확인된 참조(브랜치 또는 태그와 같은) 및 커밋(SHA1)을 포함합니다.
다음 표에는 각 파이프라인 유형에 대해 주입된 refspecs가 나열되어 있습니다:
파이프라인 유형 | Refspecs |
---|---|
브랜치용 파이프라인 |
+<sha>:refs/pipelines/<id> 및 +refs/heads/<name>:refs/remotes/origin/<name>
|
태그용 파이프라인 |
+<sha>:refs/pipelines/<id> 및 +refs/tags/<name>:refs/tags/<name>
|
병합 요청 파이프라인 | +refs/pipelines/<id>:refs/pipelines/<id>
|
refs/heads/<name>
및 refs/tags/<name>
는 당신의 프로젝트 저장소에 존재합니다. GitLab은 실행 중인 파이프라인 작업과 관련하여 특수한 ref refs/pipelines/<id>
을 생성합니다. 이 ref는 해당 브랜치 또는 태그가 삭제된 후에도 생성할 수 있습니다. 따라서 환경 자동 중지 및 병합 트레인과 같은 기능에 유용합니다.
파이프라인 보기
프로젝트의 빌드 > 파이프라인 페이지에서 현재 및 과거 파이프라인 실행을 찾을 수 있습니다. 또한 특정 머지 요청의 파이프라인에 액세스하려면 해당 Pipelines 탭으로 이동하면 됩니다.
파이프라인을 선택하여 파이프라인 세부 정보 페이지를 열고 해당 파이프라인에서 실행된 작업을 표시할 수 있습니다. 여기서 현재 실행 중인 파이프라인을 취소하거나 실패한 파이프라인의 작업을 다시 시도하거나 파이프라인을 삭제할 수 있습니다.
특정 브랜치의 마지막 커밋에 대한 최신 파이프라인으로 이동하는 링크는 /project/-/pipelines/[branch]/latest
에서 이용할 수 있습니다. 또한, /project/-/pipelines/latest
은 프로젝트의 기본 브랜치에 대한 마지막 커밋의 최신 파이프라인으로 리디렉션합니다.
GitLab 13.0에서 시작하여, 다음과 같이 파이프라인 목록을 필터링할 수 있습니다:
- 트리거 작성자
- 브랜치 이름
- 상태 (GitLab 13.1 및 이후)
- 태그 (GitLab 13.1 및 이후)
- 소스 (GitLab 14.3 및 이후)
GitLab 14.2에서 시작하여, 파이프라인 열에 표시되는 파이프라인 ID 또는 파이프라인 IID를 변경할 수 있습니다.
GitLab CI/CD 구성을 편집하는 데 VS Code를 사용하는 경우, GitLab Workflow VS Code 확장 프로그램을 사용하여 구성을 유효성 검사하고 파이프라인 상태를 보거나 할 수 있습니다.
파이프라인 수동 실행
파이프라인은 미리 정의된 또는 수동으로 지정된 변수와 함께 수동으로 실행할 수 있습니다.
파이프라인의 결과(예: 코드 빌드)가 파이프라인의 표준 작동 외부에서 필요한 경우에 사용할 수 있습니다.
파이프라인을 수동으로 실행하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인을 선택합니다.
- 파이프라인 실행을 선택합니다.
- 브랜치 이름 또는 태그에 대한 실행 필드에서 파이프라인을 실행할 브랜치 또는 태그를 선택합니다.
- 파이프라인 실행에 필요한 CI/CD 변수를 입력합니다. 특정 변수를 선택하여 양식에 값을 미리 채울 수 있습니다.
- 파이프라인 실행을 선택합니다.
이제 파이프라인은 구성된대로 작업을 실행합니다.
수동 파이프라인에 변수 미리 채우기
파이프라인을 수동으로 트리거할 때, .gitlab-ci.yml
파일에서 description
가 정의된 파이프라인 수준(글로벌) 변수를 미리 채우기 위해 description
및 value
키워드를 사용할 수 있습니다. 설명을 사용하여 변수가 어떻게 사용되는지, 허용 가능한 값은 무엇인지 등을 설명할 수 있습니다.
작업 수준 변수에는 미리 채울 수 없습니다.
수동으로 트리거된 파이프라인에서 파이프라인 실행 페이지에는 .gitlab-ci.yml
파일에서 description
가 정의된 파이프라인 수준 변수가 모두 표시됩니다. 설명은 변수 아래에 표시됩니다.
미리 채워진 값은 그 단일 파이프라인 실행에 대해 값을 무시하고, 이 과정을 통해 덮어쓴 변수는 확장되어 있으며, 마스킹되어 있지 않습니다.
구성 파일에서 변수에 대한 value
를 정의하지 않으면 변수 이름은 나열되지만 값 필드는 비어 있습니다.
예시:
variables:
DEPLOY_CREDENTIALS:
description: "The deployment credentials."
DEPLOY_ENVIRONMENT:
description: "Select the deployment target. Valid options are: 'canary', 'staging', 'production', or a stable branch of your choice."
value: "canary"
위의 예에서:
-
DEPLOY_CREDENTIALS
은 파이프라인 실행 페이지에 나열되지만 값을 설정하지 않았습니다. 사용자는 수동으로 파이프라인을 실행할 때마다 값을 정의해야 합니다. -
DEPLOY_ENVIRONMENT
은 파이프라인 실행 페이지에서 기본 값으로canary
가 미리 채워지며, 메시지에서 다른 옵션에 대해 설명합니다.
참고: 알려진 문제 때문에 컴플라이언스 파이프라인을 사용하는 프로젝트에서는 수동으로 파이프라인을 실행할 때 미리 채워진 변수가 나타나지 않을 수 있습니다. 이 문제를 해결하려면 컴플라이언스 파이프라인 구성을 변경하면 됩니다.
선택 가능한 미리 입력된 변수 값 목록 구성
-
Introduced in GitLab 15.5 with a flag named
run_pipeline_graphql
. Disabled by default. -
options
키워드는 GitLab 15.7에서 도입되었습니다. - GitLab 15.7에서 일반적으로 사용 가능합니다. 기능 플래그
run_pipeline_graphql
이 제거되었습니다. - GitLab 15.9에서 해결된 버그로 인해 변수 목록이 때로는 올바르게 작성되지 않는 경우가 있었습니다.
수동으로 파이프라인을 실행할 때 사용자가 선택할 수 있는 CI/CD 변수 값의 배열을 정의할 수 있습니다.
이 값들은 Run pipeline 페이지의 드롭다운 목록에 있습니다. options
에 값을 옵션 목록에 추가하고 value
로 기본 값을 설정하세요. value
의 문자열은 options
목록에도 포함되어야 합니다.
예시:
variables:
DEPLOY_ENVIRONMENT:
value: "staging"
options:
- "production"
- "staging"
- "canary"
description: "The deployment target. Set to 'staging' by default."
URL 쿼리 문자열을 사용하여 파이프라인 실행
- GitLab 12.5에서 도입되었습니다.
Run Pipeline 페이지를 미리 작성하려면 쿼리 문자열을 사용할 수 있습니다. 예를 들어, 쿼리 문자열 .../pipelines/new?ref=my_branch&var[foo]=bar&file_var[file_foo]=file_bar
은 Run Pipeline 페이지를 다음과 같이 미리 작성합니다.
-
Run for:
my_branch
. -
Variables 섹션:
- 변수:
- 키:
foo
- 값:
bar
- 키:
- 파일:
- 키:
file_foo
- 값:
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
에는 키와 값이 필요합니다.
파이프라인에 수동 상호 작용 추가
수동 작업을 사용하면 파이프라인에서 계속하기 전에 수동 상호 작용을 필요로 합니다.
파이프라인 그래프에서 직접 수행할 수 있습니다. 해당 작업을 실행하려면 재생 버튼을 선택하세요.
예를 들어, 파이프라인은 자동으로 시작되지만 수동 작업을 필요로 합니다.
다음 예에서 production
단계에는 수동 작업이 있는 작업이 있습니다:
단계별 모든 수동 작업 시작
단계에 수동 작업만 포함되어 있으면 해당 단계 상단의 Play all manual ()을 선택하여 모든 작업을 동시에 시작할 수 있습니다. 단계에 수동 작업 이외에 다른 작업이 포함되어 있으면 이 옵션이 표시되지 않습니다.
파이프라인 건너뛰기
파이프라인을 트리거하지 않고 커밋을 푸시하려면 커밋 메시지에 [ci skip]
또는 [skip ci]
(대소문자 상관 없음)를 추가하세요.
또는 Git 2.10 이상을 사용하는 경우 ci.skip
Git 푸시 옵션을 사용하세요.
ci.skip
푸시 옵션은 병합 요청 파이프라인을 건너뛰지 않습니다.
파이프라인 삭제
- GitLab 12.7에서 도입되었습니다.
프로젝트 소유자 역할을 하는 사용자는 Build > Pipelines에서 파이프라인을 선택하여 Pipeline Details 페이지로 이동한 후 삭제를 선택하여 파이프라인을 삭제할 수 있습니다.
파이프라인을 삭제하면 모든 파이프라인 캐시가 만료되고 빌드, 로그, 아티팩트, 트리거와 같이 즉시 관련된 모든 객체가 삭제됩니다. 이 작업은 되돌릴 수 없습니다.
보호된 브랜치에서의 파이프라인 보안
보호된 브랜치에서 파이프라인이 실행될 때 엄격한 보안 모델이 적용됩니다.
사용자가 특정 브랜치에 대해 병합 또는 푸시할 수 있는 경우 다음 작업을 보호된 브랜치에서 수행할 수 있습니다:
- 수동 파이프라인 실행( 웹 UI 또는 파이프라인 API 사용)
- 예약된 파이프라인 실행
- 트리거를 사용하여 파이프라인 실행
- 요청 대상 DAST 스캔 실행
- 기존 파이프라인에 대한 수동 작업 트리거
- 기존 작업 다시 시도 또는 취소 (웹 UI 또는 파이프라인 API 사용)
보호된 변수는 보호된 브랜치의 파이프라인에서 실행되는 작업에서 접근할 수 있습니다. 보호된 브랜치에 대한 병합 권한을 부여한 사용자는 배포 자격 증명 및 토큰과 같은 민감한 정보에 액세스할 수 있는 권한이 있어야 합니다.
보호된 러너는 보호된 브랜치에서만 작업을 실행할 수 있으며, 신뢰할 수 없는 코드가 보호된 러너에서 실행되는 것을 방지하고 배포 키 및 기타 자격 증명이 의도하지 않게 액세스되는 것을 방지합니다. 보호된 러너에서 실행되도록 의도된 작업이 일반 러너를 사용하지 않도록하려면 해당 작업에 태그를 지정해야 합니다.
파이프라인 보안을 보호하는 데 추가적인 보안 권장 사항은 배포 안전성 페이지를 확인하세요.
상위 프로젝트가 다시 빌드될 때 파이프라인 트리거
- 12.8 버전에서 도입되었습니다.
다른 프로젝트의 새 태그에 대한 파이프라인이 완료될 때 프로젝트에서 파이프라인을 트리거할 수 있습니다.
전제 조건:
- 상위 프로젝트는 공개되어 있어야 합니다.
- 사용자는 상위 프로젝트에서 개발자 역할을 가져야 합니다.
상위 프로젝트가 다시 빌드될 때 파이프라인을 트리거하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > CI/CD를 선택합니다.
- 파이프라인 구독을 확장합니다.
- 프로젝트 추가를 선택합니다.
- 구독하려는 프로젝트를
<네임스페이스>/<프로젝트>
형식으로 입력합니다. 예를 들어 프로젝트가https://gitlab.com/gitlab-org/gitlab
인 경우gitlab-org/gitlab
을 사용합니다. - 구독을 선택합니다.
이제 구독된 프로젝트의 새 태그에 대해 성공적으로 완료된 모든 파이프라인은 현재 프로젝트의 기본 브랜치에서 파이프라인을 트리거합니다. 상위 및 하위 프로젝트의 최대 파이프라인 구독 수는 기본적으로 2개입니다. 자체 호스팅된 인스턴스에서는 관리자가이 제한을 변경할 수 있습니다.
파이프라인 지속 시간 측정 방법
특정 파이프라인의 총 실행 시간은 다음을 제외한 것입니다:
- 다시 시도되거나 수동으로 다시 실행된 작업의 초기 실행 시간.
- 대기(큐) 시간.
즉, 작업이 다시 시도되거나 수동으로 다시 실행되는 경우 최신 실행의 지속 시간만 총 실행 시간에 포함됩니다.
각 작업은 Period
로 표시되며, 이는 다음으로 구성됩니다:
-
Period#first
(작업이 시작된 시간). -
Period#last
(작업이 완료된 시간).
간단한 예시:
- A (0, 2)
- A’ (2, 4)
- A를 다시 시도하는 것입니다.
- B (1, 3)
- C (6, 7)
이 예시에서:
- A는 0에서 시작하여 2에 끝납니다.
- A’는 2에서 시작하여 4에 끝납니다.
- B는 1에서 시작하여 3에 끝납니다.
- C는 6에서 시작하여 7에 끝납니다.
시각적으로는 다음과 같이 볼 수 있습니다:
0 1 2 3 4 5 6 7
AAAAAAA
BBBBBBB
A'A'A'A
CCCC
A가 다시 시도되었기 때문에 A를 무시하고 A’ 작업만 계산하게 됩니다. B, A’, C의 합집합은 (1, 4) 및 (6, 7)입니다. 따라서 총 실행 시간은 다음과 같습니다:
(4 - 1) + (7 - 6) => 4
파이프라인 시각화
파이프라인은 순차 및 병렬 작업이 많은 복잡한 구조일 수 있습니다.
파이프라인의 흐름을 이해하기 쉽게하기 위해 GitLab에는 파이프라인과 해당 상태를 볼 수 있는 파이프라인 그래프가 있습니다.
파이프라인 그래프는 큰 그래프 또는 축소된 표현으로 표시될 수 있습니다.
GitLab은 파이프라인 그래프에서 각 스테이지의 이름을 대문자로 표시합니다.
전체 파이프라인 그래프 보기
- 13.11 버전에서 시각화 개선 사항이 도입되었습니다.
파이프라인 세부 정보 페이지는 파이프라인의 모든 작업에 대한 전체 파이프라인 그래프를 표시합니다.
다음에 의해 작업을 그룹화할 수 있습니다:
다중 프로젝트 파이프라인 그래프를 통해 교차 프로젝트 상호 의존성을 포함하여 전체 파이프라인을 시각화할 수 있습니다.
스테이지에 100개 이상의 작업이 포함되어 있는 경우, 파이프라인 그래프에 첫 번째 100개의 작업만 표시됩니다. 나머지 작업은 계속해서 실행됩니다. 작업을 보려면:
- 파이프라인을 선택하고, 작업은 파이프라인 세부 정보 페이지의 오른쪽에 나열됩니다.
- 왼쪽 사이드바에서 빌드 > 작업을 선택합니다.
파이프라인 그래프에서 작업 의존성 보기
- GitLab 13.12에 도입됨 (소개됨).
- GitLab 14.0에서 기본 설정으로 활성화됨 (기본 설정으로 활성화).
- GitLab 14.2에서 특성 플래그가 제거됨 (기능 플래그 제거).
needs
의존성에 기반하여 파이프라인 그래프에서 작업을 배열하려면 Group jobs by 섹션에서 Job dependencies를 선택합니다. 이 옵션은 needs
작업 의존성이 있는 3개 이상의 작업이 있는 파이프라인에 대해 사용할 수 있습니다.
가장 왼쪽 열의 작업부터 먼저 실행되며, 해당 작업에 의존하는 작업은 다음 열에 그룹화됩니다.
예를 들어 test-job1
는 첫 번째 열의 작업에만 의존하므로 왼쪽에서 두 번째 열에 나타납니다. deploy-job1
은 첫 번째 및 두 번째 열의 작업에 모두 의존하며 세 번째 열에 나타납니다:
작업 간의 needs
관계를 보여주는 라인을 추가하려면 Show dependencies 토글을 선택합니다.
이 라인은 needs 시각화와 유사합니다:
작업의 전체 needs
의존성 트리를 보려면 해당 작업 위로 마우스를 가져가세요:
파이프라인 미니 그래프
파이프라인 미니 그래프는 적은 공간을 차지하며 각 단계의 작업이 모두 통과되었는지 또는 실패한 것이 있는지 빠르게 확인할 수 있습니다. 파이프라인 미니 그래프는 다음 경우에 찾을 수 있습니다:
- 파이프라인 색인 페이지.
- 단일 커밋 페이지.
- 병합 요청 페이지.
- 파이프라인 편집기, GitLab 14.5 이후.
파이프라인 미니 그래프를 통해 한 번의 커밋에 대한 모든 관련 작업과 파이프라인 각 단계의 최종 결과를 볼 수 있습니다. 이를 통해 빠르게 실패한 부분을 확인하고 수정할 수 있습니다.
파이프라인 미니 그래프는 단계별로 작업만을 표시합니다.
파이프라인 미니 그래프의 단계는 확장 가능합니다. 각 단계 위에 마우스를 올려 단계의 이름과 상태를 확인하고, 단계를 선택하여 해당 작업 목록을 확장할 수 있습니다.
미니 그래프 | 확장된 미니 그래프 |
---|---|
![]() | ![]() |
파이프라인 성공 및 소요 시간 차트
파이프라인 분석은 CI/CD Analytics 페이지에서 사용할 수 있습니다.
파이프라인 뱃지
파이프라인 상태 및 테스트 커버리지 보고 뱃지는 각 프로젝트에 대해 사용 가능하며 구성할 수 있습니다. 프로젝트에 파이프라인 뱃지를 추가하는 방법에 대한 정보는 파이프라인 뱃지를 참조하십시오.
파이프라인 API
GitLab은 다음을 위한 API 엔드포인트를 제공합니다:
- 기본 기능 수행. 자세한 정보는 파이프라인 API를 참조하십시오.
- 파이프라인 일정 유지. 자세한 정보는 파이프라인 일정 API를 참조하십시오.
- 파이프라인 실행 트리거. 자세한 정보는 다음을 참조하십시오: