GitHub-Azure-CI-Runner-Agent

GitHub-Azure-CI-Runner-Agent

Docker app from GoldnGroup's Repository

Overview

Self-hosted CI runner for GitHub Actions and Azure Pipelines. Run builds directly on Unraid with optional embedded Docker support. Supports GitHub Actions runners, Azure DevOps Pipelines agents, PowerShell 7, and Docker builds inside the container. Designed for home lab CI/CD, private automation pipelines, and self-hosted build infrastructure. Keywords: GitHub runner, GitHub Actions, Azure Pipelines, Azure DevOps agent, CI/CD, self-hosted runner, Docker builds.

🚀 GitHub Actions Runner & Azure Pipelines Agent (Unraid)

Run a self-hosted GitHub Actions Runner and/or an Azure Pipelines Agent on Unraid using a single container.


✨ Features

  • Supports GitHub Actions and Azure DevOps Pipelines
  • Run one or both platforms in the same container
  • PowerShell (pwsh) preinstalled
  • Automatic agent updates (always latest)
  • Persistent configuration (no re-registration on restart)
  • Optional Docker build support
  • Designed for Unraid (AppData-based storage)

🧠 How it works

On startup, the container:

  1. Checks which platforms are enabled
  2. Downloads or reuses the latest runner binaries
  3. Registers the runner/agent
  4. Starts listening for jobs

All runtime data is stored in:

/mnt/user/appdata/github-actions-runner-azure-pipelines-agent


⚡ Quick Start

GitHub only

USE_GITHUB = true GITHUB_URL = https://github.com/your-org/your-repo GITHUB_PAT =


Azure DevOps only

USE_AZDO = true AZP_URL = https://dev.azure.com/your-org AZP_TOKEN =


Both platforms

USE_GITHUB = true USE_AZDO = true


🐙 GitHub Setup

You need a Personal Access Token (PAT).

Repository runner

Required permission:

  • Repository → Administration (Read & Write)

Organization runner

Required permission:

  • Organization → Self-hosted runners (Read & Write)

🔷 Azure DevOps Setup

You need a Personal Access Token (PAT).

Required permission:

  • Agent Pools → Read & manage

🐳 Docker Build Support

Disabled by default.

Enable it:

ENABLE_DOCKER = true Extra Parameters: --restart unless-stopped --privileged


What this does

  • Starts a Docker daemon inside the container
  • Allows pipelines to build Docker images

Example:

docker build -t test . docker run test


🔐 Security Notes

Default mode is safe.

If Docker is enabled:

  • Container runs in privileged mode

Only enable Docker if needed.


⚙️ Environment Variables

Core

  • USE_GITHUB → Enable GitHub runner
  • USE_AZDO → Enable Azure agent
  • ENABLE_DOCKER → Enable Docker inside container

GitHub

  • GITHUB_SCOPE → repo / org
  • GITHUB_URL → Repository URL
  • GITHUB_ORG → Organization name
  • GITHUB_PAT → Personal Access Token
  • GITHUB_RUNNER_NAME → Runner name
  • GITHUB_RUNNER_LABELS → Labels

Azure DevOps

  • AZP_URL → Organization URL
  • AZP_TOKEN → Personal Access Token
  • AZP_POOL → Agent pool
  • AZP_AGENT_NAME → Agent name

🔧 Troubleshooting

Runner not appearing

docker logs -f


Docker not working

Ensure:

ENABLE_DOCKER=true --privileged


Permission errors

Ensure AppData path is writable.


🔄 Updating

docker pull pavlospapalexiou/github-actions-runner-azure-pipelines-agent:latest

Restart container.


📚 Additional Documentation

See:

docs/permissions.md


❤️ Contributing

Pull requests welcome.


📄 License

MIT

Install GitHub-Azure-CI-Runner-Agent on Unraid in a few clicks.

Find GitHub-Azure-CI-Runner-Agent in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for GitHub-Azure-CI-Runner-Agent Review the template variables and paths Click Install

Related apps

Details

Repository
ghcr.io/goldngroup/github-actions-runner-azure-pipelines-agent:latest
Last Updated2026-07-17
First Seen2026-05-12

Runtime arguments

Network
bridge
Shell
sh
Privileged
false
Extra Params
--restart unless-stopped

Template configuration

Runner DataPathrw

Persistent storage for runner configuration, work folders, updates, and embedded Docker data. Use a unique appdata path per container. Do not map this to /runner.

Target
/runner-data
Default
/mnt/user/appdata/github-azure-ci-runner-agent
Value
/mnt/user/appdata/github-azure-ci-runner-agent
Use Azure Pipelines AgentVariable

Set to true to enable Azure Pipelines Agent. If false, all Azure DevOps fields are ignored.

Target
USE_AZDO
Default
false
Value
false
Azure DevOps URLVariable

Azure DevOps organization URL. Example: https://dev.azure.com/myorg

Target
AZP_URL
Default
https://dev.azure.com/YOUR_ORG
Value
https://dev.azure.com/YOUR_ORG
Azure DevOps PATVariable

Azure DevOps Personal Access Token with Agent Pools Read and manage permission. Required only when Use Azure Pipelines Agent is true.

Target
AZP_TOKEN
Azure Agent PoolVariable

Azure DevOps Agent Pool name. The pool must already exist in Azure DevOps. Default: SelfHosted.

Target
AZP_POOL
Default
SelfHosted
Value
SelfHosted
Azure Agent NameVariable

Name shown for this agent in Azure DevOps.

Target
AZP_AGENT_NAME
Default
unraid-azure-pipelines-agent
Value
unraid-azure-pipelines-agent
Azure Agent Work FolderVariable

Azure Pipelines work folder. Leave as _work unless you need a custom path.

Target
AZP_WORK
Default
_work
Value
_work
Use GitHub Actions RunnerVariable

Set to true to enable GitHub Actions Runner. If false, all GitHub fields are ignored.

Target
USE_GITHUB
Default
false
Value
false
GitHub ScopeVariable

Use repo for a repository runner, or org for an organization-level runner.

Target
GITHUB_SCOPE
Default
repo
Value
repo
GitHub Repository URLVariable

GitHub repository URL. Required only when GitHub Scope is repo. Example: https://github.com/myorg/myrepo

Target
GITHUB_URL
Default
https://github.com/YOUR_ORG/YOUR_REPO
Value
https://github.com/YOUR_ORG/YOUR_REPO
GitHub OrganizationVariable

GitHub organization name. Required only when GitHub Scope is org. Example: myorg

Target
GITHUB_ORG
Default
YOUR_ORG
Value
YOUR_ORG
GitHub PATVariable

GitHub Personal Access Token used to register the runner. For repo scope, grant Administration Read and Write on the selected repository. Required only when Use GitHub Actions Runner is true.

Target
GITHUB_PAT
GitHub Runner NameVariable

Name shown for this runner in GitHub.

Target
GITHUB_RUNNER_NAME
Default
unraid-github-actions-runner
Value
unraid-github-actions-runner
GitHub Runner LabelsVariable

Comma-separated labels used to target this runner in workflows. Default: SelfHosted. Example: SelfHosted,unraid,docker

Target
GITHUB_RUNNER_LABELS
Default
SelfHosted
Value
SelfHosted
GitHub Runner Work FolderVariable

GitHub Actions work folder. Leave as _work unless you need a custom path.

Target
GITHUB_WORK
Default
_work
Value
_work
Enable Embedded DockerVariable

Set to true to enable Docker builds inside the runner container. Requires Extra Parameters to include --privileged.

Target
ENABLE_DOCKER
Default
false
Value
false
Docker Storage DriverVariable

Storage driver used by embedded Docker. Default vfs is slower but works reliably with Unraid appdata paths such as /mnt/user/appdata. Use overlay2 only if Runner Data is mapped to a path or filesystem that supports overlay mounts, for example a suitable cache or disk path.

Target
DOCKER_STORAGE_DRIVER
Default
vfs
Value
vfs
Advanced Docker OptionsVariable

Optional extra options passed to the embedded Docker daemon. Leave empty unless troubleshooting or customizing Docker.

Target
DOCKER_OPTS