Zak Benson 80e9ee41c5
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Updated docs2
2025-05-13 01:05:58 +00:00
2025-05-12 23:50:16 +00:00
2025-05-13 01:03:39 +00:00
2025-05-05 22:04:51 +00:00
2025-05-12 23:11:43 +00:00
2025-05-12 04:10:33 +00:00
2025-05-12 22:20:50 +00:00
2025-05-13 01:05:58 +00:00
2025-05-12 22:51:25 +00:00

🧪 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.yml to 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.yml has changed
  • If so, it triggers a deploy using deploy.yml
  • Only enabled: true services 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-infra user 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
Homelab CICD automation pipeline
Readme 168 KiB
Languages
Shell 55.8%
Dockerfile 44.2%