All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
🧪 Homelab CI/CD Pipeline
This project is a hands-on Infrastructure-as-Code (IaC) lab built to simulate real-world DevOps workflows and serve as a portfolio-quality example of automated service deployment.
🧠 Purpose
- Learn and practice CI/CD using real infrastructure
- Automate Docker container deployments via Ansible
- Use
services.ymlto declaratively enable/disable stacks - Showcase skills in GitOps, automation, and Linux admin
- Build a self-hosted, documented platform ready for growth
🖥️ System Overview
CICD-Control (192.168.1.49)
The orchestration node, running:
- Ansible — config management + service deployment
- Woodpecker CI — automated pipelines (via webhooks)
- Gitea — Git hosting + commit triggers
- Docker — runs CI stack (Woodpecker agents, etc.)
Stack-Host (192.168.1.50)
The services node, hosting:
- Plex, Sonarr, Radarr, Overseerr, Tautulli
- Prowlarr, Deluge, Audiobookshelf
- Traefik reverse proxy
- All deployed and managed via Ansible + Compose
⚙️ Deployment Workflow
- All service definitions live in
services.yml - Each service is written as a self-contained Ansible role
- A Woodpecker pipeline checks if
services.ymlhas changed - If so, it triggers a deploy using
deploy.yml - Only
enabled: trueservices are deployed - Disabled services are gracefully stopped
This creates a lightweight GitOps model with tight control over which services are live.
🛠️ Bootstrapping Process
The bootstrap.yml playbook runs once per host to prepare the system:
- Creates
ansible-infrauser with SSH access - Sets up passwordless sudo
- Installs Docker + Compose
- Mounts NFS shares
- Hardens SSH
- Optionally deploys base roles or dependencies
Once bootstrapped, the host is fully managed by GitOps + CI.
📁 Repo Layout
infrastructure/
├── ansible/ # Playbooks, roles, inventory
│ ├── playbooks/ # bootstrap.yml and deploy.yml
│ ├── roles/ # Per-service automation logic
│ └── inventory/ # Static host inventory (homelab.yml)
├── docker/ # Dockerfiles and woodpecker agent setup
├── docs/ # Project planning, goals, notes
├── scripts/ # CLI helper tools (e.g. new_role.sh)
├── secrets/ # Ansible Vault encrypted files
├── terraform/ # Optional infra provisioning (not in use yet)
├── services.yml # Declarative service enable/disable flags
└── README.md # You're here
🚦 Current Status
✅ SSH hardening and bootstrap complete
✅ Woodpecker CI is live and auto-triggered by services.yml changes
✅ Declarative deploy flow is tested and live
🔜 Role refinement + secrets standardization
🔜 Add more service modules + documentation coverage
Track real-time progress in docs/punchlist.md
Description
Languages
Shell
55.8%
Dockerfile
44.2%