GitLab CI/CD 파이프라인의 핵심인 .gitlab-ci.yml
파일은 프로젝트의 빌드, 테스트, 배포 과정을 정의합니다. 이 파일을 효율적으로 관리하고 유지 보수하려면, GitLab의 다양한 문법과 YAML 기능을 적절히 활용해야 합니다. 이 글에서는 .gitlab-ci.yml
파일의 유지 보수성을 높이는 5가지 핵심 방법을 소개하겠습니다.
include
사용한 파일 분할
include
키워드는 GitLab CI/CD에서 파이프라인 설정을 여러 파일로 분할해 관리하는 기능입니다. 이 키워드를 사용해 복잡한 파이프라인을 여러 파일로 나눠 정의하면 설정 파일의 가독성과 유지 보수성을 크게 향상할 수 있습니다.
include
사용법
include
키워드는 .gitlab-ci.yml
파일에서 다른 YAML 파일을 파이프라인에 포함하는 데 사용됩니다. 이 키워드를 사용하면 로컬 파일, 원격 파일, 다른 프로젝트의 파일을 가져올 수 있습니다. 그 결과, 파이프라인 구성의 모듈화와 재사용성을 개선할 수 있습니다. 구체적인 사용법을 살펴보겠습니다.
로컬 파일 포함
이는 프로젝트 내의 다른 YAML 파일을 포함하는 가장 간단하고 직접적인 방법입니다. 프로젝트의 루트 디렉터리를 기준으로 포함할 파이프라인 파일의 상대 경로를 아래와 같이 지정합니다.
# .gitlab-ci.yml
include:
# Local 파일 포함
- local: "workflow/workflow.gitlab-ci.yml"
- local: "template/build/build.gitlab-ci.yml"
원격 파일 포함
GitLab에서는 원격 YAML 파일도 포함할 수 있습니다. 이 방법은 공용 템플릿이나 외부 리소스를 사용할 때 유용합니다. 아래 예시를 참고하세요.
# .gitlab-ci.yml
include:
# Remote 파일 포함
- remote: 'https://gitlab.com/chad_infograb/pipeline-template/-/raw/main/template/test/test.gitlab-ci.yml'
원격 파일을 remote
로 포함할 때 브라우저에서 파일을 보는 Blob URL이 아닌, 파일 원본 내용을 그대로 표시하는 Raw URL을 사용해야 합니다.

다른 프로젝트 파일 포함
같은 GitLab 인스턴스 내에 있는 다른 프로젝트의 YAML 파일도 포함할 수 있습니다. 아래 예시를 참고하세요.
# .gitlab-ci.yml
include:
# Project 파일 포함 (다른 GitLab 프로젝트의 파일)
- project: "infograb/personal/chad/poc/pipeline-template"
file:
- "/template/deploy/deploy.gitlab-ci.yml"
ref: main
위 예시에서는 infograb/personal/chad/poc/pipeline-template
프로젝트의 main
브랜치에 있는 deploy.gitlab-ci.yml
파일을 현재 프로젝트의 CI/CD 파이프라인에 포함합니다.
include
와 inputs
사용법
include
키워드와 함께 inputs
키워드를 사용하면 포함된 파일에 매개변수를 전달해 더 유연하게 설정할 수 있습니다. 아래 예시를 참고하세요.
# .gitlab-ci.yml
include:
# Local 파일 포함
- local: 'workflow/workflow.gitlab-ci.yml'
inputs:
default_branch: main
위 예시에서는 workflow/workflow.gitlab-ci.yml
파일을 포함하면서 default_branch
변숫값을 main
으로 설정합니다.
inputs
키워드를 사용하려면 include
대상 파일에 아래와 같이 spec
섹션을 추가해야 합니다.
# workflow/workflow.gitlab-ci.yml
# Input spec 정의
spec:
inputs:
default_branch:
description: "The default branch name to use for workflow rules"
type: string
default: main
---
# Workflow 설정
...(중략)...
!reference
와 extends
사용한 파이프라인 상속
!reference
키워드와 extends
키워드는 GitLab CI/CD에서 설정 재사용성을 높이는 강력한 도구입니다. 두 키워드를 활용하면 파이프라인 구성을 모듈화하고 중복을 최소화해 복잡한 파이프라인도 쉽게 관리하고 확장할 수 있습니다.
!reference
사용법
!reference
키워드는 이미 정의된 다른 항목 내용의 일부(예:before_script
)를 참조하고 가져오는 데 사용됩니다. 아래 예시를 참고하세요.
# template/build/build.gitlab-ci.yml
# 기본 before_script 정의 1
.before_script_1:
before_script:
- echo "Running before_script_1 tasks..."
# 기본 before_script 정의 2
.before_script_2:
before_script:
- !reference [.before_script_1, before_script]
- echo "Running before_script_2 tasks..."
위 예시에서 .before_script_2
는 .before_script_1
의 내용 중 before_script
구성을 현재 섹션에 재사용하면서 추가 동작("Running before_script_2 tasks..."
)을 실행합니다.
extends
사용법
GitLab CI/CD YAML 파일에서 extends
키워드를 사용하면 기존의 작업(job)이나 설정을 기반으로 새로운 작업을 만들면서 일부를 수정하거나 추가할 수 있습니다. 다음 순서대로 사용하세요.
기본 설정 정의
먼저 공통된 설정을 위해 점(.
)으로 시작하는 숨은 작업 템플릿을 정의합니다. 이 템플릿은 다른 작업에서 참조할 수 있습니다. 아래 예시를 참고하세요.
# template/build/build.gitlab-ci.yml
# 기본 before_script 정의 1
.before_script_1:
before_script:
- echo "Running before_script_1 tasks..."
# 기본 before_script 정의 2
.before_script_2:
before_script:
- !reference [.before_script_1, before_script]
- echo "Running before_script_2 tasks..."
‘숨은 작업(Hidden Job)’이란?
GitLab CI/CD의 숨은 작업은 다른 작업에서 참조하는 템플릿 역할을 합니다. 이 작업은 파이프라인에서 직접 실행되지 않으며, 대신 다른 작업에서 재사용됩니다. 점(.)으로 시작하는 이름으로 정의되며, 예를 들어 .before_script_1
, .before_script_2
는 파이프라인에서 직접 실행되지 않고, 다른 작업에서 설정을 재사용하거나 확장할 때 활용됩니다.
템플릿 상속
이제 다른 작업에서 extends
키워드를 사용해 이 템플릿을 상속받아 사용할 수 있습니다. 아래 예시를 참고하세요.
# template/build/build.gitlab-ci.yml
# Build Job 정의
build_job:
stage: build
extends: .before_script_2
script:
- echo "Starting the build process..."
- echo "Compiling the code..."
- echo "Running unit tests..."
- echo "Packaging the application..."
- echo "Build process completed successfully."
- echo "This is the build artifact file" > ./output.txt
artifacts:
paths:
- ./output.txt
위 예시에서 파이프라인은 .before_script_2
에서 정의된 before_script
를 확장해 빌드 작업을 수행합니다.