금요일

GitHub Actions "Waiting for a runner to pick up this job" 에러 해결 — 원인과 대처법 총정리

🔍 검색 키워드: GitHub Actions waiting for runner 해결, GitHub Actions job queued 상태, GitHub Actions 러너 대기 멈춤, self-hosted runner stuck, GitHub Actions runner group permission 에러, GitHub Actions 워크플로우 안 돌아감

이 에러, 어떤 상황에서 만나나

어느 날 PR을 올리고 Actions 탭을 보는데 워크플로우가 계속 이 상태다.

Waiting for a runner to pick up this job...

1분, 5분, 10분이 지나도 진행이 없다. 로그를 봐도 아무것도 없다. 그냥 저 메시지만.

처음엔 GitHub 서버 문제인가 싶어서 기다린다. 그러다 재실행 눌러보고, 안 되면 구글링을 시작한다. 이 글은 그 삽질을 줄이기 위한 정리다.

원인은 크게 세 가지

1. GitHub-hosted runner 공급 부족 (일시적)

GitHub에서 제공하는 ubuntu-latest, windows-latest 같은 공유 러너는 글로벌 수요를 함께 쓴다. 트래픽이 몰리는 시간대에는 진짜로 대기열에 걸린다. 특히 2026년 5월 GitHub Actions 장애처럼 플랫폼 자체 이슈일 때도 이 증상이 나온다.

확인 방법: GitHub Status 페이지 확인. Actions 항목에 이슈가 있으면 기다리는 게 답이다.

2. Self-hosted runner가 오프라인이거나 점유 중

Self-hosted runner를 직접 운영하는 경우, runner가 꺼져 있거나, 이미 다른 job을 처리 중이거나, 등록은 됐지만 실제로 연결이 끊긴 상태일 수 있다.

확인 방법: Repository → Settings → Actions → Runners. 상태가 Offline이거나 Idle인지 확인한다.

# runner 서비스 재시작 (Linux)
cd /path/to/actions-runner
./svc.sh stop
./svc.sh start

# 상태 확인
./svc.sh status

3. Runner group 권한 문제

Organization에서 runner group을 사용하는 경우, 특정 repo가 해당 runner group에 접근 권한이 없으면 job이 영구적으로 대기 상태에 빠진다. 에러 메시지는 동일하게 "Waiting for a runner..."라서 원인을 찾기가 까다롭다.

확인 방법: Organization → Settings → Actions → Runner groups → 해당 그룹에서 "Repository access" 설정 확인.

상황별 체크리스트

상황확인 포인트조치
GitHub-hosted runner 사용 중GitHub Status 페이지장애면 대기, 아니면 재실행
Self-hosted runner 사용 중Runner 온라인 상태runner 서비스 재시작
Org runner group 사용 중Repository 접근 권한그룹에 repo 추가
runs-on 라벨 오타workflow yml의 runs-on 값라벨 정확히 입력
동시 job 수 초과Concurrency 설정제한 조정 또는 대기
특정 시간대만 발생GitHub 트래픽 패턴재실행하거나 off-peak 배포

가장 흔한 실수 — runs-on 라벨 오타

Self-hosted runner에 라벨을 my-runner로 등록했는데 workflow에 my_runner라고 쓰는 경우다. 하이픈/언더바 혼용 실수가 생각보다 많다.

# 잘못된 예
jobs:
  build:
    runs-on: my_runner  # 언더바 → 매칭 안 됨

# 올바른 예
jobs:
  build:
    runs-on: my-runner  # 하이픈 → 등록된 라벨과 일치

Runner에 등록된 라벨 목록은 Settings → Actions → Runners에서 확인 가능하다.

Self-hosted runner가 멈춰있을 때 — 완전 재등록

Runner 서비스가 좀비 상태로 남아있으면 재시작이 안 되는 경우도 있다. 이때는 제거 후 재등록이 깔끔하다.

# 1. 기존 runner 제거
cd /path/to/actions-runner
./config.sh remove --token YOUR_REMOVAL_TOKEN

# 2. 새로 등록 (GitHub → Settings → Actions → Runners → New self-hosted runner에서 토큰 발급)
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_NEW_TOKEN

# 3. 서비스로 등록 및 시작
./svc.sh install
./svc.sh start

Actions Runner Controller (ARC) 사용 중이라면

Kubernetes 위에서 ARC(Actions Runner Controller)를 쓰는 경우, DesiredReplicas=0으로 고정되어 scale-up이 안 되는 버그가 있다. EphemeralRunner가 생성되지 않는 증상이 같이 나온다.

# ARC runner scale set 상태 확인
kubectl get autoscalingrunnerset -n YOUR_NAMESPACE

# ephemeralrunner 상태 확인
kubectl get ephemeralrunner -n YOUR_NAMESPACE

# controller 로그 확인
kubectl logs -n YOUR_NAMESPACE deployment/arc-controller-manager

Controller 재시작으로 해소되는 경우가 많다.

kubectl rollout restart deployment/arc-controller-manager -n YOUR_NAMESPACE

Concurrency 설정으로 인한 대기

workflow에 concurrency 설정이 있으면 같은 그룹의 이전 job이 끝날 때까지 대기한다. 이건 에러가 아니라 의도된 동작이지만, 착각하기 쉽다.

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: false  # 이게 true면 이전 job 취소, false면 대기

cancel-in-progress: true로 바꾸면 이전 job을 취소하고 새 job이 바로 시작된다.

마무리 — 순서대로 확인하면 대부분 해소된다

  1. GitHub Status 체크 (플랫폼 이슈 먼저 배제)
  2. Runner 온라인 상태 확인
  3. runs-on 라벨 오타 확인
  4. Runner group 권한 확인
  5. ARC 사용 중이면 controller 재시작

이 순서대로 체크하면 "Waiting for a runner..." 에러는 대부분 잡힌다. 플랫폼 장애가 아닌 이상 대기 상태가 10분 이상 지속되면 위 체크리스트를 돌리는 게 빠르다.

GitHub Actions 관련해서 secrets 관련 이슈는 GitHub Actions secrets 환경변수 undefined 에러 해결 글도 참고할 수 있다.

작성일: 2026-06-25

댓글 없음:

댓글 쓰기