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:

  1. GitHub triggers your workflow
  2. The runner on your server executes the build
  3. The Docker image is pushed to Harbor
  4. 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:

  1. Enter your GitHub Personal Access Token
  2. Select the repos to connect
  3. 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 repos
  • workflow — modify workflows
  • admin:orgread: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-runner

Permission 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.

Was this page helpful?

GitHub Integration | Siovos