재우니의 블로그

 

 

 

GitLab : ASP.NET CORE 8 - .gitlab-ci.yml 내부 설명 - CI/CD

 

.gitlab-ci.yml

image: mcr.microsoft.com/dotnet/sdk:8.0

variables:
  OBJECTS_DIRECTORY: 'obj'
  NUGET_PACKAGES_DIRECTORY: '.nuget'
  SOURCE_CODE_PATH: '*/*/'

cache:
  key: "$CI_JOB_STAGE-$CI_COMMIT_REF_SLUG"
  paths:
    - '$SOURCE_CODE_PATH$OBJECTS_DIRECTORY/project.assets.json'
    - '$SOURCE_CODE_PATH$OBJECTS_DIRECTORY/*.csproj.nuget.*'
    - '$NUGET_PACKAGES_DIRECTORY'
  policy: pull-push

before_script:
  - 'dotnet restore --packages $NUGET_PACKAGES_DIRECTORY'

build:
  stage: build
  script:
    - echo "Starting build..."
    - 'dotnet build --no-restore'
    - echo "Build completed."

tests:
  stage: test
  script:
    - echo "Running tests..."
    - 'dotnet test --no-restore'
    - echo "Tests completed."

deploy:
  stage: deploy
  script: 
    - echo "Define your deployment script!"
  environment: production

 

 

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 커밋 후 파이프라인 트리거

  1. 커밋 및 푸시: 로컬에서 코드를 변경한 후, git commit과 git push 명령을 사용하여 리모트 저장소로 코드를 푸시합니다.
  2. 파이프라인 트리거: .gitlab-ci.yml 파일이 리포지토리의 루트에 존재하면, GitLab은 코드가 푸시될 때마다 이 파일을 감지하고 파이프라인을 자동으로 실행합니다.

 

3.2 파이프라인 실행 과정

  1. Docker 이미지 설정: image: mcr.microsoft.com/dotnet/sdk:8.0 설정에 따라 GitLab Runner는 해당 Docker 이미지를 사용하여 빌드 및 테스트 환경을 준비합니다.
  2. variables  설정: variables 섹션에 정의된 변수들이 설정됩니다. 이 변수들은 나중에 사용됩니다.
  3. Cache 설정: cache 섹션에서 설정한 내용에 따라, 이전에 빌드된 결과물이나 종속성 파일이 캐싱됩니다. 이는 빌드 시간을 단축시키는 데 중요한 역할을 합니다.
  4. 의존성 복원 (before_script): dotnet restore 명령을 통해 프로젝트의 의존성 파일(NuGet 패키지 등)을 복원합니다. 이때, 캐시가 있으면 이를 사용하여 복원 시간을 단축시킵니다.
  5. build 빌드 단계:
    • dotnet build --no-restore 명령을 실행하여 프로젝트를 빌드합니다. 이 명령은 .csproj 파일을 읽고 소스 코드를 컴파일하여 실행 파일을 생성합니다.
    • stage: build로 지정된 이 단계에서는 복원이 이미 완료된 상태에서 빌드만 수행합니다.
  6. test 테스트 단계:
    • dotnet test --no-restore 명령을 통해 빌드된 애플리케이션을 테스트합니다. 이 명령은 유닛 테스트를 실행하여 코드의 정확성을 확인합니다.
    • stage: test로 지정된 이 단계는 빌드된 결과물이 올바르게 동작하는지를 검증합니다.
  7. deploy 배포 단계:
    • script: echo "Define your deployment script!" 명령이 실행됩니다. 이 부분은 배포 단계에서 실제 배포 작업을 수행할 명령어로 대체해야 합니다.
    • environment: production으로 지정된 환경에 배포됩니다.

 

4. 결과

GitLab에서 커밋 후 파이프라인이 실행되면, 각 단계가 순차적으로 실행됩니다. 이 과정에서 GitLab은 각 작업이 성공했는지, 실패했는지 등을 기록하고, 최종 결과를 UI에서 확인할 수 있도록 보여줍니다. 이렇게 자동화된 CI/CD 파이프라인을 통해, 코드를 푸시할 때마다 일관된 빌드와 테스트, 배포 과정을 거칠 수 있습니다.

 

 

요약

  1. 커밋 후 파이프라인이 자동으로 트리거됨.
  2. Docker 이미지를 사용해 환경을 설정.
  3. 설정된 변수와 캐시를 활용해 빌드 및 테스트 수행.
  4. 테스트가 성공하면 배포 단계로 진행.

이 과정을 통해, 코드 변경 사항이 빠르고 안정적으로 프로덕션 환경에 배포될 수 있습니다.

 

 


 

CI/CD 기능에 대해 더 자세히 설명해 드리겠습니다.

 

상세한 CI/CD 프로세스

 

  1. 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 공식 웹사이트에서 확인하는 것이 좋습니다.