Requirements for self-hosted runner machines
You can use a machine as a self-hosted runner as long as it meets these requirements:
- You can install and run the self-hosted runner application on the machine. See Supported operating systems and Supported processor architectures.
- The machine can communicate with GitHub Actions.
- The machine has enough hardware resources for the type of workflows you plan to run. The self-hosted runner application itself only requires minimal resources.
- If you want to run workflows that use Docker container actions or service containers, you must use a Linux machine and Docker must be installed.
Supported operating systems
Linux
- Red Hat Enterprise Linux 8 or later
- CentOS 8 or later
- Oracle Linux 8 or later
- Fedora 29 or later
- Debian 10 or later
- Ubuntu 20.04 or later
- Linux Mint 20 or later
- openSUSE 15.2 or later
- SUSE Enterprise Linux (SLES) 15 SP2 or later
Windows
- Windows 10 64-bit
- Windows 11 64-bit
- Windows Server 2016 64-bit
- Windows Server 2019 64-bit
- Windows Server 2022 64-bit
macOS
- macOS 11.0 (Big Sur) or later
Supported processor architectures
x64
- Linux, macOS, Windows.ARM64
- Linux, macOS, Windows (currently in 공개 미리 보기).ARM32
- Linux.
Routing precedence for self-hosted runners
When routing a job to a self-hosted runner, GitHub looks for a runner that matches the job's runs-on
labels and groups:
- If GitHub finds an online and idle runner that matches the job's
runs-on
labels and groups, the job is then assigned and sent to the runner.- If the runner doesn't pick up the assigned job within 60 seconds, the job is re-queued so that a new runner can accept it.
- If GitHub doesn't find an online and idle runner that matches the job's
runs-on
labels and groups, then the job will remain queued until a runner comes online. - If the job remains queued for more than 24 hours, the job will fail.
Autoscaling
You can automatically increase or decrease the number of self-hosted runners in your environment in response to the webhook events you receive with a particular label.
Supported autoscaling solutions
GitHub-hosted runners inherently autoscale based on your needs. GitHub-hosted runners can be a low-maintenance and cost-effective alternative to developing or implementing autoscaling solutions. For more information, see About GitHub-hosted runners.
The actions/actions-runner-controller (ARC) project is a Kubernetes-based runner autoscaler. GitHub recommends ARC if the team deploying it has expert Kubernetes knowledge and experience.
For more information, see Actions Runner Controller 정보 and Actions Runner Controller 지원 정보.
Ephemeral runners for autoscaling
GitHub recommends implementing autoscaling with ephemeral self-hosted runners; autoscaling with persistent self-hosted runners is not recommended. In certain cases, GitHub cannot guarantee that jobs are not assigned to persistent runners while they are shut down. With ephemeral runners, this can be guaranteed because GitHub only assigns one job to a runner.
This approach allows you to manage your runners as ephemeral systems, since you can use automation to provide a clean environment for each job. This helps limit the exposure of any sensitive resources from previous jobs, and also helps mitigate the risk of a compromised runner receiving new jobs.
경고
The runner application log files for ephemeral runners must be forwarded to an external log storage solution for troubleshooting and diagnostic purposes. While it is not required for ephemeral runners to be deployed, GitHub recommends ensuring runner logs are forwarded and preserved externally before deploying an ephemeral runner autoscaling solution in a production environment. For more information, see 자체 호스트형 실행기 모니터링 및 문제 해결.
To add an ephemeral runner to your environment, include the --ephemeral
parameter when registering your runner using config.sh
. For example:
./config.sh --url https://github.com/octo-org --token example-token --ephemeral
The GitHub Actions service will then automatically de-register the runner after it has processed one job. You can then create your own automation that wipes the runner after it has been de-registered.
참고 항목
If a job is labeled for a certain type of runner, but none matching that type are available, the job does not immediately fail at the time of queueing. Instead, the job will remain queued until the 24 hour timeout period expires.
Alternatively, you can create ephemeral, just-in-time runners using the REST API. For more information, see 자체 호스트형 실행기에 대한 REST API 엔드포인트.
Runner software updates on self-hosted runners
By default, self-hosted runners will automatically perform a software update whenever a new version of the runner software is available. If you use ephemeral runners in containers then this can lead to repeated software updates when a new runner version is released. Turning off automatic updates allows you to update the runner version on the container image directly on your own schedule.
To turn off automatic software updates and install software updates yourself, specify the --disableupdate
flag when registering your runner using config.sh
. For example:
./config.sh --url https://github.com/YOUR-ORGANIZATION --token EXAMPLE-TOKEN --disableupdate
If you disable automatic updates, you must still update your runner version regularly. New functionality in GitHub Actions requires changes in both the GitHub Actions service and the runner software. The runner may not be able to correctly process jobs that take advantage of new features in GitHub Actions without a software update.
If you disable automatic updates, you will be required to update your runner version within 30 days of a new version being made available. You may want to subscribe to notifications for releases in the actions/runner
repository. For more information, see 알림 구성.
For instructions on how to install the latest runner version, see the installation instructions for the latest release.
경고
Any updates released for the software, including major, minor or patch releases, are considered as an available update. If you do not perform a software update within 30 days, the GitHub Actions service will not queue jobs to your runner. In addition, if a critical security update is required, the GitHub Actions service will not queue jobs to your runner until it has been updated.
Webhooks for autoscaling
You can create your own autoscaling environment by using payloads received from the workflow_job
webhook. This webhook is available at the repository, organization, and enterprise levels, and the payload for this event contains an action
key that corresponds to the stages of a workflow job's life-cycle; for example when jobs are queued
, in_progress
, and completed
. You must then create your own scaling automation in response to these webhook payloads.
- For more information about the
workflow_job
webhook, see 웹후크 이벤트 및 페이로드. - To learn how to work with webhooks, see 웹후크 설명서.
Authentication requirements
You can register and delete repository and organization self-hosted runners using the API. To authenticate to the API, your autoscaling implementation can use an access token or a GitHub app.
Your access token will require the following scope:
- For private repositories, use an access token with the
repo
scope. - For public repositories, use an access token with the
public_repo
scope. - For organizations, use an access token with the
admin:org
scope.
To authenticate using a GitHub App, it must be assigned the following permissions:
- For repositories, assign the
administration
permission. - For organizations, assign the
organization_self_hosted_runners
permission.
You can register and delete enterprise self-hosted runners using the API. To authenticate to the API, your autoscaling implementation can use an access token.
Your access token will require the manage_runners:enterprise
scope.
Communication
Self-hosted runners connect to GitHub to receive job assignments and download new versions of the runner application.
GitHub Actions 실행기 애플리케이션이 오픈 소스입니다. 실행기 리포지토리에서 기여하고 문제를 제출할 수 있습니다. When a new version is released, the runner application automatically updates itself when a job is assigned to the runner, or within a week of release if the runner hasn't been assigned any jobs.
Requirements for communication with GitHub
- The self-hosted runner application must be running on the host machine to accept and run GitHub Actions jobs.
- The host machine must have appropriate network access with at least 70 kilobits per second upload and download speed.
- The host machine must be able to make outbound HTTPS connections over port 443.
- Depending on the function of the workflows assigned to your self-hosted runner, the host machine must be able to communicate with the GitHub domains listed below.
Accessible domains by function
참고 항목
나열된 도메인 중 일부는 CNAME
레코드를 사용하여 구성됩니다. 일부 방화벽에서는 모든 CNAME
레코드에 대해 규칙을 재귀적으로 추가해야 할 수 있습니다. CNAME
레코드는 나중에 변경될 수 있으며 나열된 도메인만 일정하게 유지됩니다.
다음은 필수 작업에 필요합니다.
github.com api.github.com *.actions.githubusercontent.com
github.com
api.github.com
*.actions.githubusercontent.com
다음은 작업을 다운로드하는 데 필요합니다.
codeload.github.com pkg.actions.githubusercontent.com
codeload.github.com
pkg.actions.githubusercontent.com
변경할 수 없는 작업을 게시하는 데 필요합니다.
ghcr.io
ghcr.io
다음은 작업 요약, 로그, 워크플로 아티팩트 및 캐시 업로드/다운로드에 필요합니다.
results-receiver.actions.githubusercontent.com *.blob.core.windows.net
results-receiver.actions.githubusercontent.com
*.blob.core.windows.net
다음은 실행기 버전 업데이트에 필요합니다.
objects.githubusercontent.com objects-origin.githubusercontent.com github-releases.githubusercontent.com github-registry-files.githubusercontent.com
objects.githubusercontent.com
objects-origin.githubusercontent.com
github-releases.githubusercontent.com
github-registry-files.githubusercontent.com
다음은 OIDC 토큰을 검색하는 데 필요합니다.
*.actions.githubusercontent.com
*.actions.githubusercontent.com
패키지 또는 컨테이너를 GitHub 패키지에 다운로드하거나 게시하는 데 필요합니다.
*.pkg.github.com pkg-containers.githubusercontent.com ghcr.io
*.pkg.github.com
pkg-containers.githubusercontent.com
ghcr.io
Git 대용량 파일 스토리지에 필요
github-cloud.githubusercontent.com github-cloud.s3.amazonaws.com
github-cloud.githubusercontent.com
github-cloud.s3.amazonaws.com
Dependabot updates에 대한 작업에 필요
dependabot-actions.githubapp.com
dependabot-actions.githubapp.com
In addition, your workflow may require access to other network resources.
If you use an IP address allow list for your GitHub organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. See Managing allowed IP addresses for your organization or Enforcing policies for security settings in your enterprise in the GitHub Enterprise Cloud documentation.