GitHub 호스팅 러너 살펴보기

GitHub 호스팅 러너 살펴보기

GitHub은 워크플로를 실행할 호스팅 가상 머신을 제공해요. 이 가상 머신 안에는 GitHub Actions가 사용할 수 있는 도구, 패키지, 설정으로 구성된 환경이 들어 있어요.

출처: GitHub-hosted runners

본문

GitHub 호스팅 러너 개요

러너(Runner)는 GitHub Actions 워크플로에서 작업(Job)을 실행하는 머신이에요. 예를 들어 러너는 리포지토리를 로컬에 클론하고 테스트 소프트웨어를 설치한 다음 코드를 평가하는 명령을 실행할 수 있어요.

GitHub은 작업 실행에 사용할 수 있는 러너를 제공하고, 직접 자체 러너를 호스팅할 수도 있어요. 단일 CPU 러너를 제외하고 각 GitHub 호스팅 러너는 GitHub이 호스팅하는 새로운 가상 머신(VM)이에요. 단일 CPU 러너는 공유 VM의 컨테이너에서 호스팅돼요. 자세한 내용은 GitHub 호스팅 러너 참조를 참고하세요.

각 러너에는 러너 애플리케이션과 기타 도구가 미리 설치돼 있어요. GitHub 호스팅 러너는 Ubuntu Linux, Windows, macOS 운영 체제로 사용할 수 있어요. GitHub 호스팅 러너를 사용하면 머신 유지보수와 업그레이드는 GitHub이 알아서 처리해 줘요.

표준 GitHub 호스팅 러너 옵션 중 하나를 선택할 수 있고, GitHub Team 또는 GitHub Enterprise Cloud 플랜을 사용 중이라면 코어가 더 많은 러너나 GPU 프로세서로 구동되는 러너를 프로비저닝할 수도 있어요. 이런 머신을 "더 큰 러너(larger runner)"라고 불러요. 자세한 내용은 더 큰 러너를 참고하세요.

더 큰 러너는 미리 구성된 자체 VM 이미지를 만들고 관리할 수 있는 사용자 지정 이미지(custom images)도 지원해요. 자세한 내용은 사용자 지정 이미지를 참고하세요.

GitHub 호스팅 러너를 사용하려면 업로드·다운로드 속도가 초당 최소 70킬로비트(kilobits) 이상인 네트워크 접근이 필요해요.

러너 이미지

GitHub은 표준 호스팅 러너용 자체 VM 이미지 세트를 유지 관리해요. 이미지 목록과 포함된 도구는 actions/runner-images 리포지토리에서 관리돼요.

GitHub 소유 이미지의 사전 설치 소프트웨어

GitHub 소유 이미지에 포함된 소프트웨어 도구는 매주 업데이트돼요. 업데이트 프로세스는 며칠이 걸리며, main 브랜치의 사전 설치 소프트웨어 목록은 전체 배포가 끝난 후에 업데이트돼요.

워크플로 로그에는 실제 러너에 사전 설치된 도구로 연결되는 링크가 포함돼요. 워크플로 로그에서 이 정보를 찾으려면 Set up job 섹션을 펼쳐 보세요. 그 섹션 아래에서 Runner Image 섹션을 펼친 다음 Included Software 뒤에 오는 링크가 워크플로를 실행한 러너에 사전 설치된 도구를 설명해 줘요.

자세한 내용은 워크플로 실행 기록 보기를 참고하세요.

GitHub 호스팅 러너에는 위 참조 문서에 나열된 패키지 외에도 운영 체제의 기본 내장 도구가 포함돼 있어요. 예를 들어 Ubuntu와 macOS 러너에는 grep, find, which 같은 기본 도구들이 포함돼 있어요.

또한 Windows와 Ubuntu 러너 이미지의 각 빌드에 대한 소프트웨어 자재 명세서(SBOM, software bill of materials)를 볼 수 있어요. 자세한 내용은 안전한 사용 참조를 참고하세요.

러너에 설치된 소프트웨어와 상호작용할 때는 액션을 사용하는 것을 권장해요. 이 방식에는 몇 가지 장점이 있어요:

  • 일반적으로 액션은 버전 선택, 인수 전달, 파라미터 같은 더 유연한 기능을 제공해요
  • 소프트웨어 업데이트와 무관하게 워크플로에서 사용하는 도구 버전이 동일하게 유지되도록 보장해 줘요

요청하고 싶은 도구가 있다면 actions/runner-images에 이슈를 열어 주세요. 이 리포지토리에는 러너의 모든 주요 소프트웨어 업데이트에 대한 공지도 포함돼 있어요.

[!NOTE]

  • GitHub 호스팅 러너에 추가 소프트웨어를 설치할 수도 있어요. 자세한 내용은 GitHub 호스팅 러너 사용자 지정하기를 참고하세요.
  • 러너를 사용하면서 중첩 가상화(nested virtualization)가 기술적으로 가능하긴 하지만 공식적으로 지원되지는 않아요. 중첩 VM 사용은 실험적인 방식이며 전적으로 본인의 책임 하에 진행해야 해요. 안정성, 성능, 호환성에 대한 어떤 보증도 제공하지 않아요.

사용자 지정 이미지

사용자 지정 이미지를 사용하면 GitHub이 제공하는 기본 이미지에서 시작해 워크플로 요구사항에 맞게 커스터마이즈한 자체 VM 이미지를 만들 수 있어요. 사용자 지정 이미지로 할 수 있는 작업은 다음과 같아요:

  • 기존 워크플로 YAML 문법을 사용해 사용자 지정 VM 이미지 빌드하기
  • 워크플로가 시작되기 전에 승인된 도구, 보안 패치, 의존성으로 환경을 미리 구성하기
  • 모든 빌드에서 일관되고 검증된 기본 환경 만들기

사용자 지정 이미지에는 리포지토리 코드, 컨테이너 이미지, 바이너리, 인증서, 기타 의존성이 포함되어 워크플로 전반에 걸쳐 일관된 빌드 환경을 만들 수 있어요. 이는 공급망(supply chain)에 대한 통제력을 높이는 데 도움이 돼요. 이미지의 공격 표면을 줄여 설정 시간을 단축하고 빌드 성능을 개선하며 보안을 강화해 줘요. 관리자는 정책을 적용해 이미지 버전, 보존, 수명(age)을 관리해서 조직의 보안 및 규정 준수 요구사항을 충족할 수도 있어요.

사용자 지정 이미지는 더 큰 러너에서만 사용할 수 있어요. 사용자 지정 이미지를 사용하는 작업은 그 러너와 동일한 분당 요금으로 청구돼요. 사용자 지정 이미지의 스토리지는 GitHub Actions 스토리지를 통해 청구되고 측정돼요. 자세한 내용은 GitHub Actions 청구를 참고하세요.

사용자 지정 이미지로 시작하려면 사용자 지정 이미지 사용하기를 참고하세요.

GitHub 호스팅 러너가 사용하는 클라우드 호스트

GitHub은 Linux와 Windows 러너를 Microsoft Azure의 가상 머신에 GitHub Actions 러너 애플리케이션을 설치해 호스팅해요. GitHub 호스팅 러너 애플리케이션은 Azure Pipelines Agent의 포크(fork)예요. 모든 Azure 가상 머신에서 인바운드 ICMP 패킷이 차단되므로 ping이나 traceroute 명령이 동작하지 않을 수 있어요. GitHub은 macOS 러너를 Azure 데이터 센터에서 호스팅해요.

워크플로 연속성

GitHub Actions 서비스를 일시적으로 사용할 수 없을 때, 워크플로 실행이 트리거된 후 30분 안에 대기열에 들어가지 않으면 그 실행은 버려져요(discarded). 예를 들어 워크플로가 트리거됐는데 GitHub Actions 서비스를 31분 이상 사용할 수 없다면 워크플로 실행은 처리되지 않아요.

또한 워크플로 실행이 성공적으로 대기열에 들어갔지만 45분 안에 GitHub 호스팅 러너가 처리하지 못하면 대기열에 있던 워크플로 실행은 버려져요.

etc/hosts 파일

GitHub 호스팅 러너에는 다양한 암호화폐 채굴 풀과 악성 사이트로의 네트워크 접근을 차단하는 etc/hosts 파일이 프로비저닝돼 있어요. MiningMadness.com이나 cpu-pool.com 같은 호스트는 상당한 보안 위험을 만들지 않도록 localhost로 리다이렉트돼요.

더 알아보기 (Learn more)