GitLab에서 .gitlab-ci.yml 파일을 사용하여 CI/CD 파이프라인을 구성한 후, 리모트로 커밋할 때 파이프라인이 작동하는 원리를 설명하겠습니다.
1. CI/CD 개념 이해
CI/CD(Continuous Integration/Continuous Deployment)는 개발자가 코드 변경 사항을 지속적으로 통합하고, 자동으로 테스트 및 배포하는 프로세스를 의미합니다. GitLab에서는 .gitlab-ci.yml 파일을 통해 이러한 프로세스를 자동화할 수 있습니다. 이 파일은 파이프라인의 각 단계를 정의하고, GitLab Runner가 이를 수행하게 됩니다.
2. .gitlab-ci.yml 파일의 역할
.gitlab-ci.yml 파일은 GitLab에서 CI/CD 파이프라인을 설정하기 위한 구성 파일입니다. 이 파일에는 다음과 같은 주요 내용이 포함됩니다:
Docker 이미지 정의: 파이프라인이 실행될 환경을 정의합니다.
변수 설정: 빌드 및 테스트 과정에서 사용할 변수들을 정의합니다.
캐시 설정: 의존성을 캐싱하여 빌드 시간을 단축시킵니다.
스크립트 설정: 빌드, 테스트, 배포 단계에서 실행할 명령어들을 정의합니다.
3. 파이프라인 작동 원리
3.1 커밋 후 파이프라인 트리거
커밋 및 푸시: 로컬에서 코드를 변경한 후, git commit과 git push 명령을 사용하여 리모트 저장소로 코드를 푸시합니다.
파이프라인 트리거: .gitlab-ci.yml 파일이 리포지토리의 루트에 존재하면, GitLab은 코드가 푸시될 때마다 이 파일을 감지하고 파이프라인을 자동으로 실행합니다.
3.2 파이프라인 실행 과정
Docker 이미지 설정: image: mcr.microsoft.com/dotnet/sdk:8.0 설정에 따라 GitLab Runner는 해당 Docker 이미지를 사용하여 빌드 및 테스트 환경을 준비합니다.
variables 설정: variables 섹션에 정의된 변수들이 설정됩니다. 이 변수들은 나중에 사용됩니다.
Cache 설정: cache 섹션에서 설정한 내용에 따라, 이전에 빌드된 결과물이나 종속성 파일이 캐싱됩니다. 이는 빌드 시간을 단축시키는 데 중요한 역할을 합니다.
의존성 복원 (before_script): dotnet restore 명령을 통해 프로젝트의 의존성 파일(NuGet 패키지 등)을 복원합니다. 이때, 캐시가 있으면 이를 사용하여 복원 시간을 단축시킵니다.
build 빌드 단계:
dotnet build --no-restore 명령을 실행하여 프로젝트를 빌드합니다. 이 명령은 .csproj 파일을 읽고 소스 코드를 컴파일하여 실행 파일을 생성합니다.
stage: build로 지정된 이 단계에서는 복원이 이미 완료된 상태에서 빌드만 수행합니다.
test 테스트 단계:
dotnet test --no-restore 명령을 통해 빌드된 애플리케이션을 테스트합니다. 이 명령은 유닛 테스트를 실행하여 코드의 정확성을 확인합니다.
stage: test로 지정된 이 단계는 빌드된 결과물이 올바르게 동작하는지를 검증합니다.
deploy 배포 단계:
script: echo "Define your deployment script!" 명령이 실행됩니다. 이 부분은 배포 단계에서 실제 배포 작업을 수행할 명령어로 대체해야 합니다.
environment: production으로 지정된 환경에 배포됩니다.
4. 결과
GitLab에서 커밋 후 파이프라인이 실행되면, 각 단계가 순차적으로 실행됩니다. 이 과정에서 GitLab은 각 작업이 성공했는지, 실패했는지 등을 기록하고, 최종 결과를 UI에서 확인할 수 있도록 보여줍니다. 이렇게 자동화된 CI/CD 파이프라인을 통해, 코드를 푸시할 때마다 일관된 빌드와 테스트, 배포 과정을 거칠 수 있습니다.
요약
커밋 후 파이프라인이 자동으로 트리거됨.
Docker 이미지를 사용해 환경을 설정.
설정된 변수와 캐시를 활용해 빌드 및 테스트 수행.
테스트가 성공하면 배포 단계로 진행.
이 과정을 통해, 코드 변경 사항이 빠르고 안정적으로 프로덕션 환경에 배포될 수 있습니다.
CI/CD 기능에 대해 더 자세히 설명해 드리겠습니다.
상세한 CI/CD 프로세스
CI/CD 프로세스:
a) 커밋 감지:
GitLab은 저장소에 새로운 커밋이 푸시되면 웹훅을 통해 이를 감지합니다.
b) 파이프라인 구성:
.gitlab-ci.yml 파일을 파싱하여 파이프라인 구조를 결정합니다.
정의된 스테이지, 작업, 그리고 각 작업의 실행 조건을 분석합니다.
c) Runner 할당:
GitLab은 사용 가능한 Runner(작업을 실제로 실행하는 에이전트)를 찾아 작업을 할당합니다.
d) 환경 설정:
Runner는 지정된 Docker 이미지를 pull하고 컨테이너를 시작합니다.
정의된 변수들을 환경에 설정합니다.
e) 스크립트 실행:
before_script에 정의된 명령어들을 실행합니다 (예: 의존성 복원).
각 job의 script 섹션에 정의된 명령어들을 순차적으로 실행합니다.
f) 아티팩트 및 캐시 관리:
작업 결과물(아티팩트)을 저장하고, 다음 작업에서 사용할 수 있게 합니다.
캐시된 디렉토리를 저장하고 다음 실행에서 복원합니다.
g) 결과 보고:
각 작업의 실행 결과(성공/실패)와 로그를 GitLab에 전송합니다.
파이프라인 전체의 상태를 업데이트합니다.
GitLab의 CI/CD 기능 제공 형태
GitLab은 CI/CD 기능을 무료와 유료 버전 모두에서 제공합니다. 그러나 기능의 범위와 사용량에 따라 차이가 있습니다.
a) 무료 버전 (GitLab Core/Community Edition):
기본적인 CI/CD 기능을 제공합니다.
제한된 수의 무료 CI/CD 분 제공 (공유 Runner 사용 시).
간단한 파이프라인 구성 가능.
b) 유료 버전 (GitLab Premium/Ultimate):
고급 CI/CD 기능 제공 (예: 다중 프로젝트 파이프라인, 고급 보안 검사).
더 많은 CI/CD 실행 시간.
고급 보고서 및 분석 도구.
우선순위가 높은 Runner 액세스.
환경 관리, 릴리스 관리 등의 추가 기능.
대부분의 기본적인 CI/CD 작업은 무료 버전으로도 충분히 수행할 수 있습니다. 그러나 대규모 프로젝트나 복잡한 CI/CD 요구사항이 있는 경우 유료 버전의 추가 기능이 유용할 수 있습니다.
GitLab의 가격 정책과 기능은 수시로 변경될 수 있으므로, 최신 정보는 GitLab 공식 웹사이트에서 확인하는 것이 좋습니다.