DevOps/Github

Github Actions Self hosted runner

kinest1997 2024. 9. 25. 15:16

Private repository는 actions runner를 사용해서 빌드하면 매우 느리다.

예를 들어 로컬에서 빌드하면 20초도 안 걸리는데, 깃허브에서 주는 러너는 1분 넘게 소요될 때가 많다

 

속도가 너무 느려서 머신 성능을 확인해 보니 Public이랑 Private 이랑 제공해 주는 runner의 사양이 다르다.

Private -> Public으로 공개 범위를 바꿔주면 성능이 2배 좋아지지만... 내 코드는 소중하니까 공개할 수 없다.

 

호스팅 실행기 사양 확인 링크

 

 

내 코드는 공개하기 싫고, Github Actions를 빠르게 사용하고 싶고, 추가 과금은 막고 싶다면 방법이 하나 있다.

self-hosted-runner를 두는 것이다. 

 

self-hosted-runner 가 깃허브 액션으로부터 작업 내용을 전달받고, 그걸 직접 실행하는 형태다. 

대충 M1 MacMini 정도만 되어도 최소 2~3배 이상은 빠른 작업속도를 보여준다. 

 

예를 들자면 API 100개 정도의 NestJS 서버를 ARM 용 도커 이미지빌드하는데 대략 1분 정도면 완료됐다. 

 -> private repo 기준 ubuntu latest 사용 시 이미지 빌드만 3분 정도 걸렸다... 최소 2~3배 차이

 

물론 1분이나 3분이나 큰 차이 없다고 생각할 수도 있다

하지만 1분 만에 홀딱 배포해 버리면 기분이 좋지 않은가? 기분 좋으면 장땡이다. 다른 이유는 알아서들 찾자

 

사용방법

그래서 어떻게 사용하느냐, 아래 스크린샷을 확인해 보자

 

 

위 스크린샷처럼  Setting -> Actions -> Runners -> New runner 탭  해서 Runner를 추가하면 된다. 

그럼 뭐 더 볼 필요도 없이 자세히 아주 친절하게 설명이 나와있다. 

 

근데 여기서 주의할 점이 있다. 

 

대부분 처음엔 사용하는 repository가 하나밖에 없어서 해당 repository에 runner를 추가할 것이다.

하지만 이렇게 하면 나중에 귀찮아진다

-> 왜 귀찮아지느냐?

 

만약 내가 다른 프로젝트에서도 self hosted runner를 사용하고 싶어 졌을 때, 이미 다른 레포에 등록된 머신은 레포에 등록이 불가능하다.

깃허브액션 실행을 동시에 여러 개 할 수 없다는 거다. 

 

근데 난 파이썬 패키지 빌드에도 사용하고 싶고, 서버빌드에도 쓰고 싶고, npm 패키지 빌드에도 쓰고 싶은데??

-> 이럴 경우 runner를 특정 Repository에 등록하지 말고, Organization에 등록하면 된다

 

Organization 만들면 돈 드는 거 아님??

-> 기본적인 기능만 사용한다면 돈안듬

 

여러 군데서 실행하면 버그 터지는 거 아님??

-> 동시에 모든 레포에서 runner에게 업무를 전달하면 알아서 Queue 잡고 순서대로 실행된다 

 

그러니 개인 프로젝트 할 때 self-hosted 하고 싶다면 Organization을 만들고, 거기에 레포를 생성해서 모든 레포가 사용가능하도록 해주자.

 

이 정도 설명이면 Organization이나, Repository나 알아서 잘 선택했을 거라고 믿는다.

 

상세 설명 들어간다

위 화면에서 New Runner탭 하고 들어갔으면 아래 화면이 나올 거다

 

뭐 Architecture는 알아서 잘 선택하리라 믿지만. 혹시 모르니까 적어둔다

- mac, window -> ARM유무에 따라 선택, ArmARM 그냥 x64선택

- Linux가 헷갈릴 수 있는데, ARM이라면 ARM 말고 Arm64 선택해야 한다

 

적힌 명령어 그대로 복사해서 터미널, 파워쉘 등등에 입력하면 된다. 

 

Configure부터 헷갈릴 수 있는데, 

./config.sh --url https://github.com/kind-honest-pepe --token ?!@?#!#?@!#@#?!#?!@#!?#!?#

이 명령어 입력하면 대충 아래 스크린샷처럼 보일 것이다. (아래 스크린샷은 설정 완료한 화면)

 

1. Runner group을 입력하라는데, 그룹설정해 두는 건 유료다. 돈 없다 그냥 Enter 누르자 

2. runner의 이름을 넣으라는데 이건 공짜다, 원하는 이름 넣자. 나는 pepe-is-god 입력했다.

3. label을 넣으라는데 이건 공짜다, 추후 다른 러너가 추가됐을 때 구별할 수 있도록 넣어주자. 난 보통 CPU 정도 추가한다 (예를 들면 M1 Max), 라벨 여러 개 추가도 가능하지만 공백을 넣으면 안 된다. M1MAX,pepe,love이렇게 공백 없이 연속으로 입력해야 함

4. work folder선택하라는데, 이것도 대부분은 건들일이 없다. 그냥 Enter

 

이러면 runner설정은 완료다!

 

하지만 Github에 들어가 봐도 Status 가 Offline이다. 

왜냐면 설정만 해주고 실행을 안 시켰으니까.

 

실행은 또 별도로 해줘야 한다

 

actions-runner 디렉터리 안에서 아래 명령어를 실행시켜 주고 닫으면 된다.

nohup은 백그라운드에서 실행한다는 의미.

nohup입력 안 하면 터미널창 닫자마자 github랑 연결이 끊긴다.

nohup ~/actions-runner/run.sh &