<aside>
💡 본 문서에서는 Self-hosted runner를 중심으로 작성되었습니다.
</aside>
개요
- GitLab Runner는 GitLab CI/CD 작업을 수행하기 위한 파이프라인 서비스입니다.
구성
용어 정리
- Pipeline
- 일련의 잡(job)들로 구성되며 코드 변경 사항을 빌드, 테스트, 배포하는 전체 프로세스를 나타냅니다.
- Stages
- 파이프라인의 특정 단계에서 수행되는 잡들의 집합을 의미합니다. 스테이지는 순차적으로 실행됩니다.
- Jobs
- 잡은 스테이지 내에서 실행되는 개별 작업 단위입니다. 각 잡은 스크립트를 실행하여 특정 작업을 수행합니다.
- Environments
- 환경은 애플리케이션이 배포될 실제 위치 또는 서버를 나타냅니다. 이는 개발, 테스트, 스테이징, 프로덕션 등 여러 환경으로 나눌 수 있습니다.
주요 기능
- 병렬 처리: 여러 작업을 동시에 실행할 수 있습니다.
- 토큰 기반 제어
- 여러 서버에서 여러 토큰을 사용할 수 있습니다(심지어 프로젝트별로도 가능).
- 토큰당 동시에 실행할 작업 수를 제한할 수 있습니다.
- 멀티 환경 지원
- 호스트 머신의 쉘에서 작업을 실행합니다.
- Docker 컨테이너 내에서 작업을 실행합니다.
- 새로운 Docker 머신을 생성하고 그 안에서 작업을 실행합니다.
- Kubernetes 클러스터 내에서 작업을 실행합니다.
- 원격 서버에 SSH로 접속하여 작업을 실행합니다.
- GitLab Runner는 Go 언어로 작성되었으며, 다른 요구 사항 없이 단일 바이너리로 배포됩니다.
- Bash, PowerShell Core, Windows PowerShell을 지원합니다.
- 재시작 없이 자동으로 설정을 다시 로드할 수 있습니다.
Runner execution flow
sequenceDiagram
participant GitLab
participant GitLabRunner
participant Executor
opt registration
GitLabRunner ->>+ GitLab: POST /api/v4/runners with registration_token
GitLab -->>- GitLabRunner: Registered with runner_token
end
loop job requesting and handling
GitLabRunner ->>+ GitLab: POST /api/v4/jobs/request with runner_token
GitLab -->>+ GitLabRunner: job payload with job_token
GitLabRunner ->>+ Executor: Job payload
Executor ->>+ GitLab: clone sources with job_token
Executor ->>+ GitLab: download artifacts with job_token
Executor -->>- GitLabRunner: return job output and status
GitLabRunner -->>- GitLab: updating job output and status with job_token
end