Runner
1 Runner
- runner는 실제 워크플로우를 실행하는 서버를 의미합니다.
- GitHub는 Ubuntu Linux, Microsoft Windows, 그리고 macOS runner를 제공합니다.
- 각각의 워크플로우는 새롭게 프로비저닝된 가상 머신에서 실행됩니다.
- 다른 운영체제가 필요하거나 특정 하드웨어가 필요하다면 직접 runner를 구성할 수도 있습니다.
2 self-hosted runners
- self-hosted runner는 GitHub에서 호스팅하는 runner보다 하드웨어, 운영 체제 및 소프트웨어 도구에 대해 더 많은 제어를 제공합니다.
- 자체 호스팅 runner를 사용하면, 더 큰 작업을 실행할 수 있는 처리 능력이나 메모리와 같은 사용자의 요구에 맞는 맞춤 하드웨어 구성을 만들 수 있습니다.
- 또한, 로컬 네트워크에서 사용 가능한 소프트웨어를 설치하고, GitHub에서 호스팅하는 runner가 제공하지 않는 운영 체제를 선택할 수 있습니다.
- self-hosted runner는 물리적, 가상, 컨테이너 내, 현장(온프레미스), 또는 클라우드 내에서 사용할 수 있습니다.
- 자체 호스팅 러너가 14일 이상 GitHub Actions에 연결되지 않은 경우 자동으로 GitHub에서 제거됩니다.
- 임시 자체 호스팅 러너는 1일 이상 GitHub Actions에 연결되지 않은 경우 자동으로 GitHub에서 제거됩니다.
2.1.1 관리 레벨
- 관리 레벨에 따라 관리 범위를 지정할 수 있습니다.
- 리포지토리 수준: 리포지토리 수준 runner는 단일 리포지토리 에 한정합니다.
- 조직 수준: 조직 수준 runner는 조직 내 여러 리포지토리의 작업을 처리할 수 있습니다.
- 엔터프라이즈 수준: 엔터프라이즈 수준 runner는 엔터프라이즈 계정의 여러 조직에 할당될 수 있습니다.
2.1.2 서비스 설정
- 레퍼런스
- self-hosted runner 애플리케이션을 서비스로 설정하여 머신이 시작될 때마다 runner 애플리케이션이 자동으로 시작되도록 할 수 있습니다.
- systemd를 사용하는 Linux 시스템의 경우, runner를 성공적으로 추가한 후 생성된 svc.sh 스크립트를 사용하여 애플리케이션을 서비스로 설치하고 관리할 수 있습니다.
- runner 애플리케이션을 설치한 디렉토리에서 셸을 엽니다.
- 아래의 명령어를 사용하여 self-hosted runner 서비스를 설치하고 관리할 수 있습니다.
명령어
// 서비스 설치
$ sudo ./svc.sh install
// 서비스 시작
$ sudo ./svc.sh start
// 서비스 상태 확인
$ sudo ./svc.sh status
// 서비스 중지
$ sudo ./svc.sh stop
// 서비스 제거
$ sudo ./svc.sh uninstall
2.1.4 라벨
- GitHub Actions는 워크플로우를 실행하기 위해 runner를 사용합니다.
- 라벨을 사용하면 runner의 특성에 따라 정리하고, 특정 라벨을 가진 runner에서만 워크플로우를 실행하도록 설정할 수 있습니다.
- 라벨은 운영 체제, 하드웨어 사양, 특정 프로젝트 또는 팀에 전용된 runner 등 다양한 특성에 따라 지정될 수 있습니다.
워크플로우에서 라벨 사용
name: CI
on: [push]
jobs:
build:
runs-on: [self-hosted, gpu]
steps:
- uses: actions/checkout@v2
- name: Build Project
run: ./build.sh
- 워크플로우 파일에서 runs-on 키를 사용하여 특정 라벨을 가진 runner를 지정할 수 있습니다.
- 여러 라벨을 지정하여 지정된 모든 라벨을 만족하는 runner에서 작업을 실행할 수 있습니다.
- 지정된 라벨을 가진 runner가 여러 대일 경우, GitHub Actions는 가능한 runner 중에서 임의로 하나를 선택하여 작업을 실행합니다.
- 라벨이 지정되지 않은 경우, 기본적으로 GitHub에서 제공하는 호스팅 runner가 사용됩니다.
3 Adding a self-hosted runner to an organization
- 조직 수준에서 자체 호스팅 러너를 추가하면 조직 내 여러 리포지토리의 작업을 처리할 수 있습니다.
- 자체 호스팅 러너를 조직에 추가하려면 조직 소유자여야 합니다.
설치 과정
- GitHub에 로그인한 후 조직의 메인 페이지로 이동합니다.
- 조직의 설정으로 이동하기 위해 페이지 상단의 메뉴에서 'Settings'를 선택합니다.
- 왼쪽 사이드바에서 'Actions' 메뉴를 찾아 선택한 후, 'Runners' 탭으로 이동합니다.
- 페이지 상단의 'New runner' 버튼을 클릭합니다.
- runner를 설치할 운영 체제(OS)와 아키텍처를 선택한 다음, GitHub에서 제공하는 지시사항을 따릅니다. 이 지시사항은 self-hosted runner 애플리케이션을 다운로드하고, 해당 조직에 대해 runner를 구성하는 방법을 안내합니다.
- 다운로드한 runner 애플리케이션을 조직의 서버에 설치하고, 구성 스크립트를 실행할 때 조직의 URL과 특정 조직에 대한 runner의 등록 토큰을 사용합니다.
- runner 구성이 완료되면, 지시된 대로 runner 서비스를 시작합니다.
3.1 리눅스에 설치
## Create a folder
$ mkdir actions-runner && cd actions-runner
## Download the latest runner package
$ curl -o actions-runner-linux-x64-2.317.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-linux-x64-2.317.0.tar.gz
## Optional: Validate the hash
$ echo "0eksmd2sj3f8c6028aff475475a457d380053f9d01877d5hcc01a17b2a91161d actions-runner-linux-x64-2.317.0.tar.gz" | shasum -a 256 -c
## Extract the installer
$ tar xzf ./actions-runner-linux-x64-2.317.0.tar.gz
## Create the runner and start the Configuration experience
$ ./config.sh --url https://github.com/Project --token ALQA7YXCS8A5SZVDJSZLA2EDAZPO2X2
## 서비스 설치
$ sudo ./svc.sh install
## 서비스 시작
$ sudo ./svc.sh start
## 서비스 상태 확인
$ sudo ./svc.sh status
## 서비스 중지
$ sudo ./svc.sh stop
## 서비스 제거
$ sudo ./svc.sh uninstall
3.2 MacOs 설치
다운로드
## Create a folder
$ mkdir actions-runner && cd actions-runnerCopied!
## Download the latest runner package
$ curl -o actions-runner-osx-x64-2.317.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-osx-x64-2.317.0.tar.gz
## Optional: Validate the hash
$ echo "0b23ee79731522d9e1229d14d62c200e06ac9d7dddf5641966209a7700a43c14 actions-runner-osx-x64-2.317.0.tar.gz" | shasum -a 256 -c
## Extract the installer
$ tar xzf ./actions-runner-osx-x64-2.317.0.tar.gz
설정
## Create the runner and start the Configuration experience
$ ./config.sh --url https://github.com/ --token <TOKEN>
## Last step, run it!
$ ./run.sh`