GitLab CI/CD 용어 및 개념

GitLab CI/CD는 다양한 개념과 용어를 사용하여 빌드 및 배포를 설명하고 실행합니다.

Pipelines

파이프라인은 지속적 통합, 전달 및 배포의 최상위 구성 요소입니다.

파이프라인은 다음으로 구성됩니다.

  • 수행할 작업을 정의하는 Jobs. 예를 들어, 코드를 컴파일하거나 테스트하는 Job.
  • 작업을 실행할 시기를 정의하는 Stages. 예를 들어, 코드를 컴파일하는 단계 후에 테스트를 실행하는 단계.

Job은 러너에 의해 실행됩니다. 동시(concurrent) 러너가 충분한 경우, 동일한 단계의 여러 Job이 병렬로 실행됩니다.
한 단계의 모든 Job이 성공하면, 파이프라인은 다음 단계로 넘어갑니다.
한 단계의 어떤 Job이 실패하면, 다음 단계는 (일반적으로) 실행되지 않고 파이프라인이 일찍 종료됩니다.

일반적으로 파이프라인은 자동으로 실행되며 생성된 후에는 개입이 필요하지 않습니다. 그러나 수동으로 파이프라인과 상호 작용할 수 있는 경우도 있습니다.

Jobs

파이프라인 구성은 Job으로 시작됩니다. Job은 .gitlab-ci.yml 파일의 가장 기본적인 요소입니다.
Job은 Runner가 실행해야 하는 명령 모음입니다. Job의 결과물(Output)이 무엇인지 실시간으로 볼 수 있으므로, 개발자는 Job이 실패한 이유를 이해할 수 있습니다.

Job은 :

  • 어떤 조건에서 실행되어야 하는지를 명시하는 제약 조건으로 정의됩니다.
  • 임의의 이름을 가진 최상위 요소이며 최소한 script 절을 포함해야 합니다.
  • 정의할 수 있는 수에는 제한이 없습니다.

예를 들면 :

job1:
  script: "execute-script-for-job1"

job2:
  script: "execute-script-for-job2"

위의 예는 각 Job이 서로 다른 명령을 실행하는 두 개의 개별 Job이 있는 가장 간단한 CI/CD 구성입니다.

Variables

CI/CD 변수는 환경 변수의 한 유형입니다. 이를 사용하여 다음을 수행할 수 있습니다.

  • Jobs 및 파이프라인의 동작을 제어
  • 재사용하려는 값을 저장
  • .gitlab-ci.yml 파일에 값을 하드 코딩하는 것을 방지

GitLab CI/CD에는 파이프라인 구성 및 Job 스크립트에서 사용할 수 있는 사전 정의된 CI/CD 변수의 기본 세트가 있습니다.

.gitlab-ci.yml에서 미리 정의된 CI/CD 변수를 먼저 선언하지 않고도 사용할 수 있습니다.

이 예에서는 CI_JOB_STAGE 사전 정의된 변수를 사용하여 Job의 단계를 출력하는 방법을 보여줍니다.

test_variable:
  stage: test
  script:
    - echo "$CI_JOB_STAGE"

위 스크립트는 test_variable Job의 stagetest를 출력합니다.

Environments

환경은 코드가 배포되는 위치를 설명합니다.

GitLab CI/CD가 환경에 코드 버전을 배포할 때마다 배포(Deployment)가 생성됩니다.

GitLab :

  • 각 환경에 대한 전체 배포 이력을 제공합니다.
  • 배포를 추적하므로 서버에 배포된 항목을 항상 알 수 있습니다.

프로젝트와 연결된 Kubernetes와 같은 배포 서비스가 있는 경우, 이를 사용하여 배포를 지원할 수 있습니다.

Runners

GitLab CI/CD에서 러너는 .gitlab-ci.yml에 정의된 코드를 실행합니다. 러너는 GitLab CI/CD의 코디네이터 API를 통해 CI Job을 선택하고, Job을 실행한 다음, 결과를 GitLab 인스턴스로 다시 보내는 경량의 확장성이 뛰어난 에이전트입니다.

러너는 관리자가 생성하며 GitLab UI에 표시됩니다. 러너는 특정 프로젝트에 한정되거나 모든 프로젝트에서 사용할 수 있습니다.

GitLab UI에는 액세스 할 사용자에 따라 세 가지 유형의 러너가 있습니다.

  • 공유 러너(Shared runners)는 GitLab 인스턴스의 모든 그룹 및 프로젝트에서 사용할 수 있습니다.
  • 그룹 러너(Group runners)는 그룹의 모든 프로젝트와 하위 그룹에서 사용할 수 있습니다.
  • 특정 러너(Specific runners)는 특정 프로젝트와 연결됩니다. 일반적으로 특정 러너는 한 번에 하나의 프로젝트에 사용됩니다.

Artifacts

단계(Stages) 간에 전달되는 단계 결과에 사용합니다.

아티팩트는 저장 및 업로드할 수 있도록 Job에 의해 생성되는 파일입니다. 동일한 파이프라인의 이후 단계의 Job에서 아티팩트를 가져와 사용할 수 있습니다. 한 단계의 Job에서 아티팩트를 생성하여 동일한 단계의 다른 Job에서 이 아티팩트를 사용할 수 없습니다. 이 데이터는 다른 파이프라인에서 사용할 수 없지만 UI에서 다운로드할 수 있습니다.

애플리케이션을 빌드하는 동안 모듈을 다운로드하는 경우, 이를 아티팩트로 선언하고 후속 단계의 Job에서 이를 사용할 수 있습니다.

Cache

프로젝트 의존성(Dependencies)을 저장하는 데 사용합니다.

캐시는 후속 파이프라인에서 지정된 Job의 속도를 높일 수 있습니다. 인터넷에서 다시 가져올 필요가 없도록 다운로드 한 의존성을 저장할 수 있습니다. 의존성에는 npm 패키지, Go의 vendor 패키지 등이 포함됩니다. 단계 간에 중간 빌드 결과를 전달하도록 캐시를 구성할 수 있지만 대신 아티팩트를 사용해야 합니다.