A self-hosted GitHub runner is a machine (physical or virtual) that you set up and manage to run GitHub Actions workflows. A self-hosted runner differs from the default GitHub-hosted runners in that it runs on infrastructure that you control. Self-hosted runners can be physical, virtual, in a container, on-premises, or in a cloud. To learn more about GitHub runner, please click here.
Advantages of self-hosted runners:
- full control over the environment and tools
- Any size machine or configuration
- Secure access and networking
Pre-requisites:
- Project configured in GitHub
- workflow yaml already checked-in GitHub. If you don't have one, click here to create one.
- Create a virtual machine with at least 2 GB RAM. we will use EC2 instance in AWS cloud.
- Install Maven on runner EC2 instance
How to create self-hosted GitHub Actions Runner?
Go to GitHub Repo--> Actions --> Runners
Perform update
Install Maven in Runner EC2 as We will be doing Maven build for Java project
sudo apt install maven -y
Execute below commands in your virtual machine to configure runner.
Download installables
# Create a folder
mkdir actions-runner && cd actions-runner
# Download the runner package
curl -o actions-runner-linux-x64-2.323.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-linux-x64-2.323.0.tar.gz
# Extract the installer
tar xzf ./actions-runner-linux-x64-2.323.0.tar.gz
Configure the runner
./config.sh --url https://github.com/akannan1087/myJan2024WeekdayRepo --token Token
Enter the name of the runner group to add this runner to: [press Enter for Default]
press enter default for the runner group
Enter name of the runner
MyRunner1
Enter any additional labels
MyRunner1
Just press Enter for name of work folder
Now configure runner to run as a service
Even if you are stopping and starting your VM, github runner will always run.
cd actions-runner
sudo ./svc.sh start
sudo ./svc.sh status
this confirms that runner is setup and running fine. waiting for the jobs.
you can also view in GitHub under Runners tab:
Create a workflow or modify your workflow to include GitHub runner:
name: Build a WAR file using Maven
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: '11'
- name: Build with Maven
run: mvn clean install -f MyWebApp/pom.xml