개요
2025.02.03-[GitLab] CI/CD 파이프라인이란에서 GitLab CI/CD 기능의 파이프라인에 대한 개념을 알아보았다. 그중 파이프라인의 Job이 동작하는 환경을 Runner라고 하는데, 이번 글에서는 Runner에 대해서 좀 더 자세히 알아보려고 한다.
Runner
GitLab Runner는 파이프라인의 Job을 실행하는 에이전트이다. .gitlab-ci.yml 파일에 정의된 빌드, 테스트, 배포, CI/CD 작업을 실행하는 역할을 한다.
특징
- 여러 Job을 동시에 실행할 수 있다.
- 여러 서버에서 여러 토큰을 사용할 수 있고, 토큰 당 동시 작업 수를 제한할 수 있다.
- 로컬에서, 컨테이너 내에서, 컨테이너 내에서 SSH를 통해, 원격 SSH 서버에 연결해서 등등의 다양한 환경에서 Job을 실행할 수 있다.
- Go로 작성되어 단일 바이너리로 배포된다.
- Bash, PowerShell, macOS, Windows에서 동작하고 쉽게 설치할 수 있다.
- 사용자가 Job 실행 환경을 정의할 수 있고. 재시작 없이 구성을 다시 로드한다.
실행 흐름/스케쥴링
Runner의 기본적인 동작 방식은 다음과 같다.
1. GitLab에 Runner를 등록하여, Runner와 GitLab 간 지속적인 연결을 설정한다.
2. 파이프라인이 트리거되면 GitLab은 Runner가 Job을 실행할 수 있게 한다.
3. 매칭되는 Runner가 Job을 실행한다.
4. 실행 결과를 GitLab에 전달한다.
GitLab은 .gitlab-ci.yml를 기반으로 작업을 만들고 대기열에 배치한다. 대기 중인 Job은 Runner의 Tag, 유형, 상태 정보 등을 참조하여 실행 가능한 Runner에 할당된다.
유형
Runner는 호스팅 주체와 공유 여부로 구분할 수 있다.
먼저 다음은 호스팅 주체에 따른 구분이다.
GitLab 호스팅 Runner
GitLab에서 관리하는 Runner로 별도 구성 없이 바로 사용할 수 있다. 각 Job은 Linux, Windows, macOS 등의 새 VM에서 실행된다.
GitLab에서 관리하기 때문에 사용자가 별도로 유지 관리를 하지 않을 수 있고 빠르게 진행할 수 있으면서, 격리된 공간에서 Job을 실행해야 할 때 사용할 수 있다.
자체 관리 Runner
사용자가 자체 인프라에서 직접 설치하고 관리한다. 요구 사항에 맞게 사용자가 정의할 수 있고, 다양한 Shell, Docker, Kubernetes 등 Executor를 지원한다.
사용자 정의 구성이 필요하고 특정 인프라에서 직접 관리해야 할 때 사용할 수 있다.
그리고 다음은 공유 여부에 따른 구분이다.
인스턴스 러너
GitLab 인스턴스의 모든 프로젝트가 사용할 수 있다.
사용자가 직접 관리하는 GitLab인 경우 관리자가 GitLab Runner를 설치하고 인스턴스 러너로 등록하여 사용할 수 있다.
GltLab.com을 사용하는 경우에는 GitLab에서 유지 관리하는 인스턴스 러너를 선택하여 사용할 수 있다.
그룹 러너
그룹 내 모든 프로젝트가 접근할 수 있는 러너이다. 선입선출로 Job을 처리한다.
프로젝트 러너
특정 프로젝트에서 사용할 목적으로 등록한 러너이다. 동작에 작업 증명이 필요하는 등의 요구사항이 있거나 CI 작업이 많은 경우 사용할 수 있다.
참고 문서
https://docs.gitlab.com/ee/ci/runners/index.html
https://docs.gitlab.com/ee/ci/runners/runners_scope.html
https://docs.gitlab.com/runner/