내 잡다한 노트

self-hosted runner 본문

DevOps/Github_Action

self-hosted runner

peanutwalnut 2024. 11. 21. 18:06

GitHub Actions의 self-hosted runner는 CI/CD 작업을 수행하는 에이전트로 작동합니다. 각 노드에 해당 에이전트를 설치하고 실행해야 하며, 리포지토리와 러너 간의 구분 및 관리는 다음과 같은 방식으로 이루어집니다.

 

 

1. Self-Hosted Runner의 기본 작동 방식

  • 러너는 특정 리포지토리, 조직, 또는 엔터프라이즈 계층에 연결할 수 있습니다.
  • GitHub Actions 워크플로우가 실행될 때, 해당 워크플로우에서 지정한 러너 그룹(또는 태그)에 따라 작업이 배정됩니다.
  • 러너는 각 노드에 설치되고, 워크플로우의 runs-on 조건에 따라 선택됩니다.

 

2. 러너의 구분 방식

1) 러너를 리포지토리에 연결

  • 특정 러너를 개별 리포지토리에만 연결할 수 있습니다.
  • 이렇게 하면, 해당 러너는 지정된 리포지토리의 워크플로우에서만 사용할 수 있습니다.

설정 방법:

  1. 러너를 설정할 리포지토리로 이동.
  2. Settings → Actions → Runners로 이동.
  3. 새로운 self-hosted runner를 추가.

예시:
러너가 my-repository에 연결된 경우, 해당 리포지토리 내에서만 사용 가능.


2) 러너를 조직(Organization) 단위로 연결

  • 러너를 조직 단위로 설정하면, 조직 내의 여러 리포지토리에서 해당 러너를 사용할 수 있습니다.
  • 이 경우, 리포지토리별 접근 권한 또는 러너 그룹을 통해 러너 사용을 제한할 수 있습니다.

예시:

  • 조직 my-org에 연결된 러너가 있다면, repo-1, repo-2 등 여러 리포지토리에서 사용 가능.

 

3) 러너 그룹 사용

  • 조직 단위에서 러너를 그룹으로 분리하여 관리 가능.
  • 각 그룹은 특정 리포지토리나 워크플로우에 할당할 수 있습니다.

설정 방법:

  1. 조직 설정에서 Actions → Runners → Runner Groups로 이동.
  2. 새로운 그룹을 생성하고 특정 리포지토리에 접근 권한 설정.

 

4) 태그를 사용한 러너 필터링

러너에 태그를 추가하면 워크플로우의 runs-on 필드에서 태그를 기준으로 러너를 선택할 수 있습니다.

태그 추가:

  • 러너 설치 시 labels(태그)를 설정합니다.
  • 예: label="web-server", label="build-node".
  • jobs:
      build:
        runs-on: [self-hosted, web-server]
        steps:
          - name: Checkout code
            uses: actions/checkout@v3
  • 동작 방식:
    • runs-on 조건에 맞는 태그가 부여된 러너에서 작업을 실행.

 

3. 러너를 각 노드에 설치 및 관리

각 노드에 러너 설치

  1. GitHub에서 제공하는 Self-Hosted Runner 설치 스크립트를 사용.
  2. 러너 실행 시 특정 리포지토리, 조직, 또는 엔터프라이즈 계층에 등록.
  3. 각 러너는 고유한 이름을 가지며, 태그로 추가적인 구분 가능.

러너 유지 관리

  • 러너가 여러 노드에 설치된 경우, 다음을 고려해야 합니다:
    • 리소스 관리: 각 노드의 CPU, 메모리, 디스크 사용량 모니터링.
    • 러너 업그레이드: GitHub에서 제공하는 새로운 러너 버전으로 주기적으로 업그레이드.
    • 로그 관리: 각 러너가 실행한 작업 로그를 중앙에서 관리.

4. 리포지토리별로 러너를 구분하는 방식

  • 리포지토리 단위로 러너를 제한:
    • 특정 러너를 개별 리포지토리에만 연결.
  • 태그 기반으로 러너를 필터링:
    • 러너에 태그를 추가하고, 워크플로우에서 조건에 맞는 태그의 러너를 사용.
  • 조직 단위로 그룹화:
    • 조직 내에서 러너 그룹을 생성하고, 리포지토리별로 그룹 접근을 제한.

 

5. 각 러너의 역할 및 사용 제한

리포지토리 전용 러너

  • 특정 리포지토리에서만 사용되므로 작업 충돌이나 자원 낭비를 방지.
  • 독립적인 러너가 필요한 경우 적합.

공유 러너

  • 조직 단위 또는 엔터프라이즈 전반에서 사용할 수 있도록 설정.
  • 여러 리포지토리에서 동시에 사용할 수 있어 자원 활용 효율화.