Last active
March 16, 2024 17:30
-
-
Save davi020/a7d77cea1f8e575e6d3595a10d0812ed to your computer and use it in GitHub Desktop.
Shell script to setup multiple selfhosted github runner service in an AL2 server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Variables | |
runner_version="2.314.1" # GitHub runner version | |
count=2 # Number of GitHub runner services to create | |
base_dir="/apps" # Base directory for github runner services | |
working_dir_base="/apps/actions-runners/action-runner-" # GitHub runner working directories | |
# Get user and group input | |
read -p "Enter the action process username: " action_process_user | |
read -sp "Enter your GitHub PAT (masked): " PAT | |
echo | |
read -p "Enter the repository URL: " repo_url | |
# Extract GitHub username and repository name from the repository URL | |
github_user_name=$(echo "$repo_url" | cut -d'/' -f4) | |
your_repo_name=$(echo "$repo_url" | cut -d'/' -f5) | |
# Generate GitHub personal access token via API | |
generate_access_token() { | |
echo "Generating GitHub actions-runners-registration token..." | |
# Create a registration token for a repository | |
access_token=$(curl -s -X POST \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: Bearer $PAT" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
"https://api.github.com/repos/$github_user_name/$your_repo_name/actions/runners/registration-token" \ | |
| jq -r .token) | |
if [ -z "$access_token" ]; then | |
echo "Failed to generate actions-runners-registration token." | |
exit 1 | |
fi | |
echo "Actions-runners-registration token generated successfully." | |
} | |
# Generate GitHub personal access token | |
generate_access_token | |
# Get the hostname of the machine | |
get_hostname() { | |
hostname=$(hostname) | |
if [ -z "$hostname" ]; then | |
echo "Failed to retrieve hostname." | |
exit 1 | |
fi | |
echo "$hostname" | |
} | |
# Get the hostname | |
hostname=$(get_hostname) | |
# Create working directories if not present and set ownership permissions | |
for ((i=1; i<=$count; i++)); do | |
working_dir="${working_dir_base}${i}" | |
if [ ! -d "$working_dir" ]; then | |
sudo mkdir -p "$working_dir" | |
fi | |
sudo chown -R "$action_process_user":"$action_process_user" "$working_dir" | |
done | |
# Install and configure GitHub runner for each working directory | |
for ((i=1; i<=$count; i++)); do | |
working_dir="${working_dir_base}${i}" | |
cd "$working_dir" || exit | |
if [ ! -d "actions-runner-$i" ]; then | |
# Download GitHub runner | |
curl -O -L "https://github.com/actions/runner/releases/download/v${runner_version}/actions-runner-linux-x64-${runner_version}.tar.gz" | |
tar xzf "./actions-runner-linux-x64-${runner_version}.tar.gz" | |
rm -f "./actions-runner-linux-x64-${runner_version}.tar.gz" | |
# Configure GitHub runner with the generated access token and hostname label along with default labels | |
./config.sh --url "$repo_url" --token "$access_token" --name "actions-runner-$i" --unattended --replace --labels "$hostname" | |
# Start the GitHub runner service | |
sudo ./svc.sh install | |
sudo ./svc.sh start | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment