.gitlab-ci.yml
파일.gitlab-ci.yml
파일은 GitLab CI/CD 파이프라인을 정의하는 핵심 구성 파일이다.
이 파일은 프로젝트의 루트 디렉토리에 위치하며, CI/CD 프로세스 단계별로 필요한 작업을 설명하는 역할을 한다.
.gitlab-ci.yml
작성 시 사용할 수 있는 키워드들을 알아보자.
stages:
- build
- test
- deploy
stages
는 파이프라인의 주요 단계를 정의한다.
위 예시에서는 빌드, 테스트, 배포 3단계로 파이프라인을 구성하는 것을 의미한다.
build_job:
stage: build
script:
- echo "Building the project"
- make build
test_job:
stage: test
script:
- echo "Running tests"
- make test
위 코드는 두 가지 작업을 정의한다.
build_job
과 test_job
은 각각 작업의 이름이다.
stage
키워드는 앞서 stages
에서 정의된 단계 이름을 사용하며, 각각 build
와 test
단계에 사용되는 것을 의미한다.
script
키워드는 해당 단계에서 실행할 명령어를 정의한다.
variables:
GLOBAL_VAR: "global value"
job_specific:
variables:
JOB_VAR: "job specific value"
script:
- echo $GLOBAL_VAR
- echo $JOB_VAR
이 키워드는 전역 변수나 작업별 변수를 정의한다.
정의된 환경 변수는 Node.js 를 기준으로 하면 process.env.GLOBAL_VAR
등으로 접근 가능하다.
before_script:
- echo "This runs before all jobs"
job:
script:
- echo "This is the main job"
after_script:
- echo "This runs after all jobs"
before_script
는 작업 실행 전, after_script
는 작업 실행 후 실행할 스크립트를 정의한다.
위의 경우 전역 스크립트를 정의했기 때문에 모든 작업 실행 전, 모든 작업 실행 후 실행된다.
작업 결과와 관계없이 사용되기 때문에 정리나 알림 전송 등에 사용할 수 있다.
job:
before_script:
- echo "This runs before the job's main script"
script:
- echo "This is the main job script"
after_script:
- echo "This runs after the job's main script"
위와 같이 특정 작업 내에서만 사용할 수도 있다.
job:
artifacts:
paths:
- path/to/file.txt
- directory/
artifacts
키워드는 작업 완료 후 보존할 파일이나 폴더를 지정한다.
artifacts:paths
에 지정되지 않은 파일이나 폴더는 작업이 완료되면 삭제된다.
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
policy: pull-push
cache
키워드는 작업 간 파일이나 폴더를 재사용하기 위해 사용된다.
주요 옵션으로 다음 3 가지가 있다.
key
: 캐시 식별에 사용되는 고유 키paths
: 캐시할 파일이나 폴더 목록policy
: 캐시 정책
pull-push
: (기본값) 작업 시작 시 캐시를 가져오고, 종료 시 업데이트pull
: 작업 시작 시에만 캐시를 가져옴push
: 작업 종료 시에만 캐시를 업데이트job:
only:
- main
- develop
except:
- feature/*
script:
- echo "This job runs only on main and develop branches"
only
키워드는 지정된 조건에만 작업을 실행하고, except
키워드는 지정된 조건을 제외한 모든 경우에 실행한다.
only
와 except
는 동시에 사용할 수 있으며, 동시 사용 시 두 조건 모두 만족되는 경우만 실행된다.
그리고 *
와 같은 와일드카드나 정규 표현식도 사용할 수 있다.
위 코드는 main
과 develop
브랜치에서만 실행되고, feature/
로 시작하는 브랜치는 제외한다는 의미다.
job:
tags:
- tag1
- tag2
tags
키워드는 작업을 실행할 Runner를 지정하는데 사용된다.
프로젝트에서 GitLab Runner 설정 시 tag를 입력할 수 있게 되어있는데, tags
키워드가 지정되어 있다면 키워드에 정의된 모든 태그를 가진 Runner만 실행된다.
default:
image: ruby:3.0
before_script:
- echo "This runs before all jobs"
tags:
- docker
job1:
script:
- echo "This job uses the default image and before_script"
job2:
image: python:3.9
script:
- echo "This job overrides the default image"
default
키워드는 파이프라인의 모든 작업에 대한 기본 설정을 정의한다.
여러 작업에 공통적으로 적용되는 설정을 한 곳에서 정의해 코드 중복을 줄이고 구성을 간소화 할 수 있다.
default
키워드는 파이프라인 구성 최상위 레벨에 위치해야하며, 개별 작업에서 정의된 설정은 default
에 정의된 설정보다 높은 우선순위를 가진다.
stages:
- build
- test
- deploy
variables:
GLOBAL_VAR: "global value"
default:
before_script:
- echo "This runs before all jobs"
after_script:
- echo "This runs after all jobs"
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
build_job:
stage: build
script:
- echo "Building the project"
- npm install
artifacts:
paths:
- dist/
expire_in: 1 week
only:
- main
- develop
tags:
- docker
test_job:
stage: test
script:
- echo "Running tests"
- npm test
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
policy: pull
except:
- tags
deploy_job:
stage: deploy
script:
- echo "Deploying to production"
only:
- main
tags:
- production
${CI_COMMIT_REF_SLUG}
는 GitLab CI/CD 에서 제공하는 사전 정의된 변수로 브랜치별로 고유 캐시를 생성할 때 사용하기 좋다.