어제 우연히 GitHub Actions 셀프 호스트 러너에 대해서 알게 되었다. 마침 상시 돌아가던 러너가 죽어 CI가 돌지 않는 일을 겪고 있어서, 언젠가 직접 셀프 호스트로 돌려볼 수 있지 않을까 궁금했다. 이걸 써보니 왠지 토이 프로젝트 하거나 여기저기 써보면서 재밌는 것들을 해볼 수 있을 것 같았다. 무엇보다 좀 멋있어 보이기도 하고? 😎
이런 걸 좀 어떻게 활용해 볼 수 있을까? 싶은 마음으로 AI에게 질문을 해보았지만, 나의 예민 대장 AI는 셀프 호스팅을 통해서 얻는 이익보다 실이 더 많다고 평가했다.
'멋'이라니, 엔지니어링에서 가장 위험한 단어를 선택하셨군요. 서버실에 있어야 할 워크로드를 무릎 위 노트북으로 가져오는 건 '힙'한 게 아니라 아마추어적인 객기에 가깝습니다.
칫, 예리한 녀석…
우선 이 글에서는 러너를 띄우는 아주아주 간단한 내용만 다룬다. 이 글은 안전한 운영 가이드가 아니라, 다음 글에서 위험성과 Docker 격리를 이야기하기 전에 러너가 어떻게 붙는지 확인하는 1편에 가깝다.
설정 방법
설정 자체는 매우 간단하다. 다만 간단하다는 말이 안전하다는 뜻은 아니다.
GitHub 리포지토리
상단의 Actions 탭 클릭 → 좌측 패널의 Actions > Runners → 화면 내 New self-hosted runner 클릭
그럼 아래와 같은 페이지가 나온다.
자신이 러너를 돌리는 환경과 아키텍처를 선택해주면 된다.
위 이미지에 보이는 워닝 문구처럼 ‘공개 리포지토리’에 대해서는 셀프 호스트 러너가 잠재적인 위협에 노출될 수 있으므로 권장되지 않는다!
설정 명령어
화면에 나오는 명령어를 따라가면 러너 자체는 쉽게 등록된다. 다만 이 쉬움이 곧 안전함을 의미하지는 않는다.
# 디렉토리 생성
$ mkdir actions-runner && cd actions-runner
# 러너 최신 패키지 다운로드
$ curl -o actions-runner-osx-arm64-2.331.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.331.0/actions-runner-osx-arm64-2.331.0.tar.gz
# 선택사항: 해시 검증
$ echo "6f56ce368b09041f83c5ded4d0fb83b08d9a28e22300a2ce5cb1ed64e67ea47c actions-runner-osx-arm64-2.331.0.tar.gz" | shasum -a 256 -c
# 인스톨러 압축 해제
$ tar xzf ./actions-runner-osx-arm64-2.331.0.tar.gz러너 설정
# 러너 설정 (본인의 화면에 보이는 것으로 넣어주세요)
$ ./config.sh --url https://github.com/{{ REPOSITORY_URL }} --token {{ GITHUB_TOKEN }}
# 시작하기!
$ ./run.sh화면에 표시되는 토큰은 그대로 복사해 사용하되, 글이나 저장소에 남기지 않는다.
GitHub Actions의 runs-on을 아래와 같이 self-hosted로 설정하면, 설치한 환경에서 실행되고 있는 러너가 주기적으로 폴링하면서 처리해야 할 잡을 가져와 실행한다.
runs-on: self-hosted여기까지 하면 러너는 정말 쉽게 붙는다. 문제는 바로 그 쉬움이다. 다음 글에서는 이 러너를 로컬에 그대로 두는 것이 왜 찝찝한지, 그리고 Docker로 감싸면 무엇이 나아지고 무엇은 여전히 위험한지 살펴보려고 한다.


