콘텐츠로 이동

러너와 실행 환경

개요

워크플로의 잡을 "어디에서 실행할까"가 정해져야 실제로 돌아가요. 이 실행 환경을 러너(Runner)라고 해요. 기본적으로는 GitHub이 제공하는 호스팅 러너를 쓰지만, 사내 환경이 필요하거나 리소스를 직접 관리하고 싶다면 Self-hosted runner를 우리 머신에 달아 쓸 수 있어요.

상위 문서: GitHub Actions · 워크플로 · 액션

핵심 개념

호스팅 러너. GitHub이 인프라를 관리하고, 매번 깨끗한 가상머신으로 제공하는 러너예요. ubuntu-latest, windows-latest, macos-latest처럼 라벨로 지정해요. 세팅이 거의 필요 없어서 대부분의 CI에 적합해요.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: echo "hello"

Self-hosted 러너. 우리가 운영하는 머신에 GitHub Actions 러너 에이전트를 설치하고, 저장소(또는 조직)에 등록해서 쓰는 방식이에요. 다음 같은 이유로 선택해요.

  • 사내 네트워크 접근 — 방화벽 안의 레지스트리나 내부 서비스에 접근해야 할 때
  • 맞춤 하드웨어·리소스 — GPU, 큰 메모리, 특정 OS가 필요할 때
  • 비용·제어 — 호스팅 러너 분(분 단위 과금) 사용을 줄이고 환경을 직접 관리하고 싶을 때

러너 등록과 라벨. Self-hosted 러너는 등록 후 라벨을 매겨요. 워크플로는 runs-on에 그 라벨을 적어 특정 러너 그룹에서 돌게 지정해요. 조직 단위로 러너 그룹을 만들어 접근 권한을 제어할 수도 있어요.

주의점. Self-hosted 러너는 공개 저장소의 워크플로가 실행하면 위험할 수 있어요. 공격자가 악성 코드로 러너 안에서 실행되거나 시크릿을 훔칠 수 있으니, 공개 저장소에는 호스팅 러너를 쓰고 Self-hosted 러너는 사설 저장소에서만 쓰는 게 기본 권장이에요.

실제 적용(데이터스케쳐스)

대부분의 CI는 호스팅 러너(ubuntu-latest)로 돌아요. 하지만 사내 레지스트리(Harbor)에 이미지를 push하거나 내부 네트워크의 서비스에 접근해야 하는 배포 관련 잡은 Self-hosted 러너로 처리해요. 호스팅 러너는 밖에서 사내 리소스에 닿기 어려운 경우가 많기 때문이에요. 운영 환경과 가까운 곳에서 실행해야 하는 작업일수록 러너 선택이 중요해요.

더 알아보기