♾️ DevOps & Tooling: Ciclo di Vita del Software
“Automatizza tutto ciò che deve essere fatto più di due volte.”
::: info DevOps è l’unione di persone, processi e tecnologie per fornire valore continuo agli utenti. Si basa su tre pilastri: Isolamento (Docker), Collaborazione (Git) e Automazione (CI/CD). :::
1. Docker: Containerizzazione & Isolamento
Docker permette di impacchettare un’applicazione con tutte le sue dipendenze in un’unità standard chiamata Container.
- Vantaggio: Garantisce che l’ambiente di sviluppo, test e produzione sia identico.
- Best Practice: Usa Multi-stage Builds per mantenere le immagini leggere e sicure (specialmente in C++).
Esempio: Multi-stage Dockerfile (C++20)
# Stage 1: Build environment
FROM gcc:13 AS build
WORKDIR /app
COPY . .
RUN g++ -O3 -std=c++20 main.cpp -o my_app
# Stage 2: Runtime environment (minimal)
FROM debian:bookworm-slim
WORKDIR /root/
COPY --from=build /app/my_app .
CMD ["./my_app"]
2. Git Workflow: Strategie di Branching
Il codice deve essere versionato in modo logico. Il workflow consigliato per piccoli team o progetti personali è il GitHub Flow.
- Main Branch: Contiene sempre codice pronto per la produzione.
- Feature Branches: Ogni nuova funzionalità o bugfix avviene su un branch separato (
feature/add-login). - Pull Request (PR): Il codice viene revisionato prima di essere unito al
main.
Messaggi di Commit (Conventional Commits)
Usa uno standard per rendere il log di Git leggibile:
feat: add user authenticationfix: resolve memory leak in parserdocs: update readme with installation steps
3. CI/CD: Continuous Integration & Deployment
La pipeline è la catena di montaggio automatizzata del tuo software.
- Continuous Integration (CI): Ogni volta che fai un
push, un server (es. GitHub Actions) avvia automaticamente i test. Se i test falliscono, il codice non viene integrato. - Continuous Deployment (CD): Se i test passano, il software viene distribuito automaticamente sul server (es. la tua istanza Proxmox).
Esempio: GitHub Action Workflow (Python)
name: Python CI
on: [push]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run Tests
run: pytest
4. Infrastruttura come Codice (IaC)
Dato che usi Proxmox, l’evoluzione naturale del DevOps è gestire le VM tramite codice invece di cliccare sulla GUI.
- Terraform: Permette di definire l’intera infrastruttura (VM, Reti, Storage) in file di testo.
- Ansible: Automatizza la configurazione interna delle VM (installazione pacchetti, setup utenti, deploy di file config).
⚖️ Critical Spirit: Evitare l’eccesso di automazione
L’automazione ha un costo di manutenzione.
- Progetti Piccoli: Non creare pipeline CI/CD ultra-complesse per script da 100 righe.
- Sicurezza: Non inserire mai password o API Key nel Dockerfile o nel codice Git. Usa i Secrets (GitHub Secrets, Vault) o variabili d’ambiente (
.env).
Ultimo aggiornamento: {{UPDATE_DATE}} | Tags: #DevOps #Docker #Git #CICD #Automation