GitHub Integration
CI/CD with self-hosted runners
Siovos can deploy GitHub Actions runners on your server. Your builds run on your own infrastructure and deploy directly to your Kubernetes cluster.
How It Works#
When you push code to GitHub:
- GitHub triggers your workflow
- The runner on your server executes the build
- The Docker image is pushed to Harbor
- The app is deployed to K3s
Everything stays private. Your code never leaves your infrastructure.
Configuration During Deployment#
In the wizard, at the GitHub Integration step:
- Enter your GitHub Personal Access Token
- Select the repos to connect
- Complete the deployment
Runners are automatically registered on GitHub.
Create a GitHub Token#
Go to GitHub Settings → Developer settings → Personal access tokens and create a token with these permissions:
repo— access to private reposworkflow— modify workflowsadmin:org→read:org— if using organization repos
Example Workflow#
Create .github/workflows/deploy.yml in your repo:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Build & push
run: |
docker build -t registry.internal/myapp:${{ github.sha }} .
docker push registry.internal/myapp:${{ github.sha }}
- name: Deploy
run: |
kubectl set image deployment/myapp app=registry.internal/myapp:${{ github.sha }}The key point: runs-on: self-hosted to use your runner.
Check Runner Status#
In Siovos Desktop, go to your infrastructure → Services tab. The runner should appear as "Online".
You can also check on GitHub: Repository → Settings → Actions → Runners.
Add Repos Later#
From your infrastructure → Actions tab → Configure GitHub runners, you can connect other repos at any time.
Common Issues#
Runner "Offline" — Connect via SSH to your server and check the service:
sudo systemctl status actions-runnerPermission denied on Harbor — Add HARBOR_PASSWORD to your repo secrets (Settings → Secrets → Actions).
kubectl doesn't work — Check that /home/runner/.kube/config exists and is valid on your server.