Self-Hosted Runner 를 돌려보자

Panda·2023년 2월 19일
0

Git

목록 보기
3/3

왜 Self-Hosted Runner를 돌리게 되었는가

AWS EC2 인스턴스에 도커로 CI/CD 배포를 하려던 중 SSH 접속에 문제가 발생하게 되었습니다.
그 이유는 AWS EC2 보안그룹 인바운드에 SSH 포트 IP 제한을 하였기 때문에 Github-Hosted Runner의 IP가 허용되지 않아 접속이 안되는 문제였습니다.

그래서 여러가지 방법을 알아보다가 2가지 방법을 발견하였습니다.

  • Github-Action Runner IP를 AWS 보안그룹에 추가하는 Git Action 작성
    (AWS CLI를 사용하여 보안그룹에 IP 추가 가능)
  • Self-Hosted Runner로 IP가 허용된 기기(제 맥북)를 사용하는 것

1번 방법으로 하기에는 Git Action이 작동될때마다 IP들이 추가되므로 보안적으로 찜찜하기 때문에 2번 방법으로 하기로 하였습니다.

Self-Hosted Runner 란?

Github Actions 워크플로에서 작업을 실행하는 데 사용되는 환경을 사용자 지정할 수 있는 시스템
(From. Github Docs)

즉 우리의 개인 PC, 노트북 등에 환경에서 Git Action을 동작하게 할 수 있는 것입니다.
또한 Agent가 Github쪽에 접근하는 방식이라 개인 환경 IP를 노출할 필요도 없죠!!

Self-Hosted Runner 구축

Repository -> Settings -> Actions -> Runners 에 들어가시면
저렇게 Self-Hosted Runner를 생성할 수 있습니다.

생성 버튼을 누르시게 되면 Runner의 OS 종류를 선택할 수 있습니다. 저 같은 경우는 개인 맥북을 사용하기 때문에 macOS로 선택해 구축을 하였습니다.

명령어들이 쭉 나열되어 있는데 저 명령어들을 로컬 머신에 순차적으로 입력하시면 됩니다.
(저 같은 경우는 개인 맥북)

./config.sh 파일을 실행하게 되면 Runner 이름, Runner Label, Git Action이 실행하면서 소스코드가 체크아웃 될 경로를 설정하게 됩니다.
(제가 이미 구축하고 작성하는 글이라 이 부분은 사진이 없어서 죄송합니다 ㅠㅠ)

모자이크 된 값은 Repository의 토큰값이라 가려놓았습니다.

아 참고로 ./run.sh 파일을 실행 해야지만 Git Action이 로컬 머신에서 작동하기 때문에
Git Action을 하기 전에 ./run.sh 가 잘 작동하고 있는지 확인해주세요!!

./run.sh가 잘 작동하고 있는지 확인하는 법은 간단합니다.

./run.sh 실행 전

./run.sh 실행 전에는 Runners에 확인을 하게 되면 Status가 Offine으로 되어있습니다.

./run.sh 실행 후

로컬 머신 터미널에는 이런식으로 Github와 연결이 되었다고 표시가 됩니다.

Runners 에는 Status가 Idle로 변경된 것을 확인할 수가 있습니다.
이 상태가 되어야지 Git Action 워크플로 실행 시 설정된 Self-Hosted Runner로 동작을 수행합니다.

그러면 한번 프로젝트를 빌드하고 AWS EC2 배포하는 Git Action을 동작시켜볼까요??

Git Action 실행

Git Action WorkFlow

name: Backend Dev Deploy to EC2

on:
  push:
    branches: [ runner-test-release/ec2 ]

jobs:
  deploy:
    runs-on: self-hosted	# self-hosted 로 변경 (macOS라고 작성해도 상관없습니다.)

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 17
        uses: actions/setup-java@v1
        with:
          java-version: 17
       
       	# 대충 프로젝트 빌드하는 작업들
       	# ...
       	# ...
         
		# Github-Hosted-Runner 일때는 appleboy/ssh-action@master 사용했었으나
        # appleboy/ssh-action@master 라이브러리가 Linux만 지원해서....
        # 생으로 ssh 명령어 작성을 하여 수행하였습니다.
      - name: EC2 Docker Deploy and Run
        run: |
          ssh -t -i {SSH KEY 파일입니다.} ec2-user@${{ secrets.EC2_HOST }} '
          docker ps -aq | xargs docker stop | xargs docker rm && 
          docker image prune -a -f &&
          docker pull {도커 저장소}:"'$GITHUB_SHA'" &&
          docker run -d -p 443:443 --name panda-instance {도커 저장소}:"'$GITHUB_SHA'"
          '

결과

성공적으로 수행을 하였고 실제로 프로젝트도 잘 배포가 되어 올라간 것을 확인하였습니다.

그리고 분명 IP 제한 문제로 Self-Hosted Runner를 구축을 한 것인데 Git Action을 수행해 보니까 문제 해결 이외에 한가지 더 장점이 있었습니다.
바로 Git Action 워크플로 수행시간이 매우 단축되었습니다.

기존 Git Action 수행시간

기존에는 Git Action 수행시간이 5 ~ 6분 정도 소요가 되었는데 Self-Hosted Runner로 구축 이후에는 평균 2 ~ 3분 정도 소요되었습니다. 체감상 엄청 빨라졌어요 진짜
이것이 맥북??

Self-Hosted Runner 구축으로 얻은 이득

  1. SSH IP 제한 문제 해결
  2. Git Action 수행 속도 대폭 감소

단점?

단점 아닌 단점은 IP제한을 저희 집 와이파이 IP로 해서 어디 이동하거나 하면 SSH 문제가 또 발생한다는 건데 이건 단점이라긴 보다 개인 맥북을 Runner로 등록한 이상 당연한거라서
이것을 해결하고 싶으면 개인 맥북이 아닌 Self-Hosted Runner를 위한 서버를 구축해서 거기서 Runner를 실행하면 될 것같습니다.
(이 방식이 훨씬 좋을 것 같습니다. 돌릴수 있는 서버만 여유가 있다면.....)

느낀 점

그냥 단순하게 Git Action 돌리다가 오류가 발생하여서 해결하려고 알아보다가 적용하게 되었는데
생각외로 장점들이 많은 것 같아서 많이 사용하게 될 것 같습니다.
나중에 CI/CD를 위한 빌드서버를 구축하면 참 좋은 것 같습니다.

앞으로는 Github-Hosted Runner 사용할 일은 거의 없을듯 ㅋㅋㅋㅋㅋ

profile
실력있는 개발자가 되보자!

0개의 댓글