Skip to content

CI/CD Pipeline

GitHubActionsHarborSwarm
  1. Push to GitHub — Developer pushes code to a branch (usually main or develop)

  2. GitHub Actions triggers — Self-hosted runner on Contabo picks up the workflow

  3. Build & Push — Docker image is built and pushed to Harbor at harbor.ayinza.dev

  4. Deploy to Swarmdocker service update --image rolls out the new container

Both runners run on Contabo (vmi2912133) as systemd services.

ayinza runner

  • Service: actions.runner.ayinza.vmi2912133
  • User: pk
  • Org: github.com/ayinza

sseris runner

  • Service: actions.runner.sseris.vmi2912133
  • User: sharif
  • Org: github.com/sseris
Terminal window
# Check runner status
sudo systemctl status actions.runner.ayinza.vmi2912133
sudo systemctl status actions.runner.sseris.vmi2912133
# Restart a runner
sudo systemctl restart actions.runner.ayinza.vmi2912133
PropertyValue
ToolSonatype Nexus 3
Address84.247.134.135:8082
PurposeMaven and npm dependency caching
Datanexus-data volume (34 MB)

Docker Swarm won’t let a failed update take down a working service. If the new container fails to start or its health check fails, the old healthy container keeps running. The failed new task is rejected and the service continues serving traffic on the previous version.

This means a broken image push won’t break production — the existing service stays up. See Rollback Procedures for more details.