Linux용 호스티드 러너

Linux용 호스티드 러너 (Hosted runners on Linux)

GitLab.com의 Linux용 호스티드 러너는 Google Cloud Compute Engine 위에서 동작해요. 각 잡(job)은 완전히 격리된 임시(ephemeral) 가상 머신(VM) 하나를 받는데, 기본 리전은 us-east1이에요. 즉 매번 깨끗한 환경에서 빌드가 시작되는 거죠.

각 VM은 Google의 Container-Optimized OS(COS)와 최신 Docker Engine을 쓰고, docker+machine executor로 실행돼요. 머신 타입이나 프로세서 종류는 바뀔 수 있으니, 특정 프로세서 설계에 최적화된 잡은 결과가 일관되지 않을 수 있다는 점만 알아두면 좋아요.

출처: 문서

본문

Untagged 잡은 기본 small Linux x86-64 러너에서 실행돼요.

Linux x86-64에서 사용 가능한 머신 타입

GitLab은 Linux x86-64 호스티드 러너에 대해 다음과 같은 머신 타입을 제공해요.

Runner Tag vCPUs Memory Storage
saas-linux-small-amd64 (default) 2 8 GB 30 GB
saas-linux-medium-amd64 4 16 GB 50 GB
saas-linux-large-amd64 (Premium and Ultimate only) 8 32 GB 100 GB
saas-linux-xlarge-amd64 (Premium and Ultimate only) 16 64 GB 200 GB
saas-linux-2xlarge-amd64 (Premium and Ultimate only) 32 128 GB 200 GB

Linux Arm64에서 사용 가능한 머신 타입

GitLab은 Linux Arm64 호스티드 러너에 대해 다음과 같은 머신 타입을 제공해요.

Runner Tag vCPUs Memory Storage
saas-linux-small-arm64 2 8 GB 30 GB
saas-linux-medium-arm64 (Premium and Ultimate only) 4 16 GB 50 GB
saas-linux-large-arm64 (Premium and Ultimate only) 8 32 GB 100 GB

Linux Arm 호스티드 러너에서 Docker-in-Docker를 사용하면 네트워크 연결 문제가 생길 수 있어요. 이 문제는 Google Cloud의 최대 전송 단위(MTU) 값과 Docker의 값이 일치하지 않을 때 발생해요. 해결하려면 클라이언트 쪽 Docker 설정에 --mtu=1400을 넣어주세요. 자세한 내용은 issue 473739를 참고하세요.

컨테이너 이미지

Linux 러너는 docker+machine executor를 사용하므로, .gitlab-ci.yml 파일에서 image를 정의해서 어떤 컨테이너 이미지든 고를 수 있어요. 선택한 Docker 이미지가 프로세서 아키텍처와 호환되는지만 확인하면 돼요.

이미지를 설정하지 않으면 기본값은 ruby:3.1이에요.

Docker-in-Docker 지원

saas-linux-<size>-<architecture> 태그가 붙은 러너는 Docker-in-Docker를 지원하도록 privileged 모드로 실행돼요. 이 러너를 쓰면 격리된 잡 안에서 Docker 이미지를 네이티브하게 빌드하거나 여러 컨테이너를 실행할 수 있어요.

gitlab-org 태그가 붙은 러너는 privileged 모드로 동작하지 않으므로 Docker-in-Docker 빌드에는 쓸 수 없어요.

예제 .gitlab-ci.yml 파일

small이 아닌 다른 머신 타입을 쓰려면 잡에 tags: 키워드를 추가하면 돼요. 예를 들면:

job_small:
  script:
    - echo "This job is untagged and runs on the default small Linux x86-64 instance"

job_medium:
  tags:
    - saas-linux-medium-amd64
  script:
    - echo "This job runs on the medium Linux x86-64 instance"

job_large:
  tags:
    - saas-linux-large-arm64
  script:
    - echo "This job runs on the large Linux Arm64 instance"

더 알아보기

호스티드 러너는 리눅스뿐 아니라 macOS, Windows에도 있어요. 각 러너의 머신 타입과 이미지 설정을 보고 내 프로젝트에 가장 맞는 러너를 골라보세요. Docker-in-Docker 문서를 함께 보면 컨테이너 빌드 파이프라인을 구성하는 데 도움이 돼요.