github self-hosted runners

https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners

관리 계층의 다양한 수준에서 자체 호스팅 러너를 추가할 수 있습니다.

  • 리포지토리 수준 러너는 단일 리포지토리 전용입니다.

  • 조직 수준 실행자는 조직의 여러 리포지토리에 대한 작업을 처리할 수 있습니다.

  • 엔터프라이즈 수준 실행자는 엔터프라이즈 계정의 여러 조직에 할당될 수 있습니다.

 

여러 리포지토리에서 접근을 하려면 조직 수준 runner를 등록해서 사용을 해야 함.

 

자체 호스팅 러너 머신에 대한 요구 사항

https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#supported-architectures-and-operating-systems-for-self-hosted-runners

다음 요구 사항을 충족하는 한 모든 시스템을 자체 호스팅 러너로 사용할 수 있습니다.

 

github runner 설치 및 등록

repository 또는 organization 차원에서 runner 를 등록할 수 있음.

https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners

repository 용 runner는 repository의 Settings - Actions - Runners 에서 추가를 하면 됨.

runner 를 추가하는 화면에서 runner를 설치하고 설정하는 부분에 대한 설명이 나옴. 

설치시 root로 진행을 하면 sudo 관련한 에러가 나옴. 

보안을 위해서 별도 user를 만들어서 runner를 실행함. runner 를 실행할 user를 만들고 docker 를 사용하기 위해서 docker group에 추가를 해준다. 

sudo useradd -m -s /bin/bash --comment 'github runner' github-runner sudo usermod -aG docker github-runner sudo su - github-runner

github-runner user로 runner 설치. 설정을 할 때  나오는 url과 token 정보를 이용

mkdir actions-runner && cd actions-runner curl -o actions-runner-linux-x64-2.288.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.288.1/actions-runner-linux-x64-2.288.1.tar.gz tar xzf ./actions-runner-linux-x64-2.288.1.tar.gz ./config.sh --url https://github.com/VntgCorp/example --token ATZHRXXXXXXXX

설정화면

$ ./config.sh --url https://github.com/VntgCorp --token ATxxxxxxxxxxxxxx -------------------------------------------------------------------------------- | ____ _ _ _ _ _ _ _ _ | | / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ | | | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| | | | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ | | \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ | | | | 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 web] she_test This runner will have the following labels: 'self-hosted', 'Linux', 'X64' Enter any additional labels (ex. label-1,label-2): [press Enter to skip] she_test √ Runner successfully added √ Runner connection is good # Runner settings Enter name of work folder: [press Enter for _work] √ Settings Saved.

 

Enter the name of the runner group to add this runner to : runner group을 따로 설정을 할 필요가 없으므로 그냥 엔터. github teams에서는 Default 밖에 없으며 github enterprise에서는 git repo별로 사용 가능한 runner를 설정할 수 있음)

Enter the name of runner : runner 의 이름

Enter any additional labels : labels 추가 지정. 웹 UI에서 나중에 변경할 수 있음.

self-hosted runners 를 github actions에 추가할 때 자동으로 self-hosted, 운영 체제 및 하드웨어 플랫폼 레이블이 설정 된다. 필요하면 추가 레이블을 설정할 수 있다. 예를 들어 x86_64 ubuntu 20.04 의 경우 self-hosted, linux, X64 로 나온다.

 

아래는 root 권한으로 실행을 하거나 github-users 에 sudo 권한을 주면 sudo로 명령어 실행 가능함. install은 systemd 설정을 하며 실행하는 사용자(github-runner)를 지정하는 것임. (https://docs.github.com/en/actions/hosting-your-own-runners/configuring-the-self-hosted-runner-application-as-a-service#installing-the-service 문서에서는 install --user 옵션이 있지만 실제로는 --user 옵션이 없어야 작동함. 매뉴얼이 잘못된 듯)

이경우 systemctl을 통해서 runner 서비스가 돌아간다. systemctl을 통해서 service를 확인하고 로그를 볼 수 있다.

서비스 중지 및 제거

 

만약 현재 실행하고 있는 runner를 중지시키고 다시 설정을 하려고 한다면

  • 먼저 서비스 중지 및 제거 (stop, uninistall) 명령을 실행한다.

  • runner를 등록한 웹화면에서 ./config.sh remove --token Axxxxxxx 명령어를 안내해준다. 설치할 때 사용한 token 값을 넣을 것이다. 해당 명령을 실행하면 github 에서 runner 를 삭제하고 runner를 설치한 OS의 관련된 정보 및 서비스를 삭제한다. https://docs.github.com/en/actions/hosting-your-own-runners/removing-self-hosted-runners 참고.

  • 삭제 후에 runner를 다시 등록하려면 ./config.sh 실행하여 runner를 등록하고 서비스 등록, 시작을 해주는 과정을 진행하면 된다.

organization 용 github runner 설치 및 등록

조직에 자체 호스팅 러너를 추가하려면 조직 소유자여야 합니다. organization의 Settings - Actions - Runners 에서 추가를 하면 됨.

https://github.com/organizations/sample/settings/actions/runners (조직 소유자만 접근 가능)

repository 용 runner 와는 다르게 organization 용 runner 는 Runner Groups 의 Default 에서 Repository access 에서 특정 repo를 선택하거나 All repositories 를 선택해 주어야 다른 git repo에서 runner를 사용할 수 있다.

 

Runner groups 을 이용하여 self-hosted runner와 git repo를 제한하는 기능이 있는데 이건 github Enterprise에서만 지원이 됨.

보안 문제로 public repo의 경우에는 기본적으로 organization에 있는 runner group 을 사용할 수 없다. (https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories )

 

이렇게 organization 용 github runner 를 등록하면 해당 repo의 Runners 설정에서 등록한 runner가 나옴

workflow 에서 runner 사용

https://docs.github.com/en/actions/hosting-your-own-runners/using-self-hosted-runners-in-a-workflow

runs-on: [self-hosted, linux, X64]

workflow에서 runner에 할당한 레이블을 넣으면 됨. and 조건임. 

 

자체 호스팅 러너는 GitHub 작업에 추가될 때 특정 레이블을 자동으로 받습니다. 다음은 운영 체제 및 하드웨어 플랫폼을 나타내는 데 사용됩니다.

  • self-hosted: 모든 자체 호스팅 러너에 적용되는 기본 레이블입니다.

  • linux, windows, 또는 macOS: 운영 체제에 따라 적용됩니다.

  • x64, ARM, 또는 ARM64: 하드웨어 아키텍처에 따라 적용됩니다.

 

워크플로의 YAML을 사용하여 이러한 레이블 조합으로 작업을 보낼 수 있습니다. 이 예에서 세 가지 레이블 모두와 일치하는 자체 호스팅 실행자는 작업을 실행할 수 있습니다.

 

각 runner에 label 을 설정할 수 있음.

https://docs.github.com/en/actions/hosting-your-own-runners/using-labels-with-self-hosted-runners

 

github actions 윈도우서버 실행

github runner 윈도우 서버 2019, 윈도우 서버 2016 지원

https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

 

windows 2019 에 설치된 소프트웨어 목록 : https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md

 

.Net Core 3.x 빌드하는 예제인데 빌드하면서 에러는 나지만 windows 서버에서 실행이 되는 것은 확인을 했음.

GitHub - microsoft/github-actions-for-desktop-apps: This repo contains a sample WPF application to demonstrate how to create CI/CD pipelines using GitHub Actions.

 

windows 10에 self-hosted runner 설치하는 것도 self-hosted runner 추가하는 화면에 명령이 나와있다. powershell 을 관리자 권한으로 실행해야 서비스 등록을 할 수 있다.

공용 github runner

organization 용 runner를 구성하고 Runner 에 해당 lable 을 지정함.(and 조건임) (참고로 다른 github actions에서도 self-hosted 라고 넣어주면 해당 runner를 사용할 가능성는 있음.