All apps · 0 apps
GitHub-Azure-CI-Runner-Agent
Docker app from GoldnGroup's Repository
Overview
Readme
View on GitHub🚀 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:
- Checks which platforms are enabled
- Downloads or reuses the latest runner binaries
- Registers the runner/agent
- 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.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/goldngroup/github-actions-runner-azure-pipelines-agent:latestRuntime arguments
- Network
bridge- Shell
sh- Privileged
- false
- Extra Params
--restart unless-stopped
Template configuration
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
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 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 Personal Access Token with Agent Pools Read and manage permission. Required only when Use Azure Pipelines Agent is true.
- Target
- AZP_TOKEN
Azure DevOps Agent Pool name. The pool must already exist in Azure DevOps. Default: SelfHosted.
- Target
- AZP_POOL
- Default
- SelfHosted
- Value
- SelfHosted
Name shown for this agent in Azure DevOps.
- Target
- AZP_AGENT_NAME
- Default
- unraid-azure-pipelines-agent
- Value
- unraid-azure-pipelines-agent
Azure Pipelines work folder. Leave as _work unless you need a custom path.
- Target
- AZP_WORK
- Default
- _work
- Value
- _work
Set to true to enable GitHub Actions Runner. If false, all GitHub fields are ignored.
- Target
- USE_GITHUB
- Default
- false
- Value
- false
Use repo for a repository runner, or org for an organization-level runner.
- Target
- GITHUB_SCOPE
- Default
- repo
- Value
- repo
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 organization name. Required only when GitHub Scope is org. Example: myorg
- Target
- GITHUB_ORG
- Default
- YOUR_ORG
- Value
- YOUR_ORG
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
Name shown for this runner in GitHub.
- Target
- GITHUB_RUNNER_NAME
- Default
- unraid-github-actions-runner
- Value
- unraid-github-actions-runner
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 Actions work folder. Leave as _work unless you need a custom path.
- Target
- GITHUB_WORK
- Default
- _work
- Value
- _work
Set to true to enable Docker builds inside the runner container. Requires Extra Parameters to include --privileged.
- Target
- ENABLE_DOCKER
- Default
- false
- Value
- false
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
Optional extra options passed to the embedded Docker daemon. Leave empty unless troubleshooting or customizing Docker.
- Target
- DOCKER_OPTS