Github Actions - 1. self-hosted runner

zuckerfrei·2023년 1월 8일
2

Github Actions

목록 보기
1/3
post-custom-banner

0. 요약

Github Actions의 runner 개념 및 self-hosted runner 설치 방법 정리


1. runner란?

이전에 사용해본 gitlab runner와 비슷한 개념

runner가 서버에서 대기 상태로 있다가 선언된 트리거가 작동되면 workflow를 실행한다.

Github Actions에는 크게 2 종류의 runner가 존재한다.

github-hosted runner

  • runner가 github 서버에 위치하여 workflow를 실행하는 개념
  • 남의 서버(github의 서버)에서 리소스를 빌려 원하는 작업을 수행하므로 유료 서비스이다.
    • 무료로 약간의 runner를 사용해볼 수 있지만 운영으로 사용하기에는 어렵다고 생각한다.
    • public repo라면 무료로 사용할 수 있다고 한다.
  • 남의 서버에서 workflow를 실행하므로 권한(유저, 폴더 접근 등) 같은 제한 사항이 당연히 있을 수 밖에 없다 → 좀 더 상세한 custom workflow를 실행하고자 한다면 이 github hosted runner옵션은 비추한다.

self-hosted runner

  • 사용자의 PC or 서버에 runner를 위치시켜 workflow를 실행하는 개념
  • 사용자가 관리하는 서버의 리소스를 사용하므로 비용 없이 서비스를 사용할 수 있다.
  • 보통 보안 때문에 private repo를 많이 사용하는데, 이럴 경우 self hosted runner를 사용하면 좋다.

2. self-hosted runner 설치

1) self hosted server 준비

NCP > centos 7.8

2) runner 설치

  • Linux, Windows, Mac OS를 지원한다.
  • 1서버에 N개 runner를 설치해도 잘 작동한다.
  • github repo > settings > actions > runners > new self-hosted runner 메뉴 클릭
  • 설치파일 다운로드
# Create a folder under the drive root
mkdir actions-runner && cd actions-runner

# Download the latest runner package
curl -o actions-runner-linux-x64-2.299.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.299.1/actions-runner-linux-x64-2.299.1.tar.gz

# Optional: Validate the hash
echo "147c14700c6cb997(중략)ee88ead6fe73a72c74  actions-runner-linux-x64-2.299.1.tar.gz" | shasum -a 256 -c

# shasum 명령어 실행이 안 될 경우 
sudo yum install perl-Digest-SHA -y

# Extract the installer
.tar xzf ./actions-runner-linux-x64-2.299.1.tar.gz.
  • runner 설정 및 등록
[admin@dt-dpr actions-runner]$  sudo ./bin/installdependencies.sh
--------OS Information--------
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
....


[admin@dt-dpr actions-runner]$ ./config.sh --url https://github.com/zzuckerfrei/tutorial_actions --token {token}

--------------------------------------------------------------------------------
|        ____ _ _   _   _       _          _        _   _                      |
|       / ___(_) |_| | | |_   _| |__      / \   ___| |_(_) ___  _ __  ___      |
|      | |  _| | __| |_| | | | | '_ \    / _ \ / __| __| |/ _ \| '_ \/ __|     |
|      | |_| | | |_|  _  | |_| | |_) |  / ___ \ (__| |_| | (_) | | | \__ \     |
|       \____|_|\__|_| |_|\__,_|_.__/  /_/   \_\___|\__|_|\___/|_| |_|___/     |
|                                                                              |
|                       Self-hosted runner registration                        |
|                                                                              |
--------------------------------------------------------------------------------

# Authentication


√ Connected to GitHub

# Runner Registration

Enter the name of the runner group to add this runner to: [press Enter for Default]

Enter the name of runner: [press Enter for dt-dpr] tuto

This runner will have the following labels: 'self-hosted', 'Linux', 'X64'
Enter any additional labels (ex. label-1,label-2): [press Enter to skip]

√ Runner successfully added
√ Runner connection is good

# Runner settings

Enter name of work folder: [press Enter for _work]

√ Settings Saved.
  • runner 실행
[admin@dt-dpr actions-runner]$ ./run.sh

√ Connected to GitHub

Current runner version: '2.299.1'
2023-01-06 05:59:06Z: Listening for Jobs

3) runner 상태 확인

  • Offline : 서버에 설치는 되었으나 listen상태가 아닐 경우

  • Idle : 서버에 설치되었고 listen 상태인 경우

  • Active : 서버에 설치되었고 workflow가 실행 중인 경우

4) 백그라운드로 runner 실행하기

  • ./run.sh 파일로 실행시키면 그 프로세스가 종료될 경우 runner도 죽어서 Offline상태가 된다.
  • 백그라운드 프로세스로 실행시켜서 계속 listen 상태가 되도록 만든다.
[admin@dt-dpr actions-runner]$ nohup ./run.sh & > nohup.out
[1] 55178
[admin@dt-dpr actions-runner]$ nohup: ignoring input and appending output to ‘nohup.out’
  • Idle인 상태가 오래 지속되면 github 에서 runner를 제한한다고 하기도 하는데, 이럴 경우를 대비하여 cron으로 등록시켜도 좋을 것 같다.

5) runner 삭제

  • 더 이상 runner가 필요 없을 경우 아래 명령어로 서버에서 제거할 수 있다.
  • 다만 runner 관련 설치 파일들은 그대로 존재한다.
./config.sh remove --token {token}

다음 포스팅에서는 Github Actions workflow 파일 작성을 정리해야겠다.

profile
무설탕 음료를 좋아합니다
post-custom-banner

0개의 댓글