DevOps / CI/CD

    CI/CD Best Practices

    Deploy wiele razy dziennie bez strachu. Trunk-based development, canary releases, supply chain security i DORA metrics — co robią elite software teams.

    GitHub Actions
    Pipeline standard
    Canary / Blue-Green
    Deploy strategy
    SLSA + Sigstore
    Supply chain sec.
    Multiple per day
    Elite deploy freq.

    8-etapowy pipeline CI/CD

    Dobrze zaprojektowany pipeline balansuje szybkość feedbacku z kompletnym pokryciem — fail fast, ale nie pomijaj ważnych kontroli.

    1. Code Quality

    Lint, format check, static analysis, type checking — szybki feedback w sekundy

    ESLint, Prettier, mypy, SonarQube, Semgrep

    2. Unit Tests

    Izolowane testy logiki biznesowej — setki/tysiące testów w sekundy

    Jest, pytest, JUnit, Go testing, vitest

    3. Build + Image

    Kompilacja, bundlowanie, Docker build — deterministyczny artefakt gotowy do deploy

    Docker, Buildpack, Bazel, Turbo, nx

    4. Security Scan

    CVE scan deps + image, SAST, secret detection — security shift-left

    Trivy, Snyk, Semgrep, TruffleHog, Grype

    5. Integration Tests

    Testy z prawdziwymi zależnościami (DB, cache, API) — Testcontainers lub staging

    Testcontainers, docker-compose, k3s

    6. E2E Tests

    Pełne flow użytkownika na staging — selektywnie, tylko krytyczne ścieżki

    Playwright, Cypress, Selenium, k6

    7. Staging Deploy

    Automatyczny deploy na staging po przejściu wszystkich testów — preview environment

    Argo CD, Flux, Helm, Vercel Preview

    8. Production Release

    Canary → stopniowy rollout → monitoring → 100% lub rollback

    Argo Rollouts, Flagger, Feature Flags

    Często zadawane pytania

    Jakie są najlepsze praktyki CI/CD — od czego zacząć?

    CI/CD (Continuous Integration / Continuous Delivery) to praktyki które automatyzują budowanie, testowanie i wdrażanie oprogramowania. Fundamenty dobrego CI: Trunk-Based Development: wszyscy developerzy commitują do jednego brancha (main/trunk). Krótko żyjące feature branches (max 1-2 dni) lub feature flags zamiast długich branchy. Eliminuje merge hell. Automatyczne testy przy każdym commit: unit tests (sekunde), integration tests (minuty). Fail fast — pipeline przerywa się natychmiast po błędzie. Build raz, deploy wszędzie: artefakt (Docker image) budowany raz w CI. Ten sam image promowany przez staging → produkcja. Nie buduj ponownie dla każdego środowiska. Deterministic builds: te same inputy zawsze dają te same outputy. Lock file (package-lock.json, Cargo.lock, go.sum). Hermetic builds (brak zewnętrznych deps w build time). Pipeline as Code: Jenkinsfile, .github/workflows, .gitlab-ci.yml. Wersjonowany razem z kodem. Peer review dla pipeline zmian. Dobre praktyki CD: Blue/Green Deployment — dwa identyczne środowiska, przełącz ruch. Canary Releases — stopniowe rollout (5% → 25% → 100%). Feature Flags — oddzielenie deploy od release. Automated Rollback — automatyczne cofnięcie przy alert. Database migrations — forward-only, backward compatible. Shift-left security — security checks w CI (SAST, dependency scan).

    GitHub Actions, GitLab CI, CircleCI — jak wybrać narzędzie CI/CD?

    GitHub Actions: natywna integracja z GitHub. YAML workflows w .github/workflows/. Marketplace — 10,000+ actions (reusable steps). Self-hosted runners dla custom environments lub speed. Free dla public repos, płatne minuty dla private. Matrix builds — testuj na wielu OS/wersji jednocześnie. OIDC — połącz z AWS/GCP/Azure bez long-lived credentials. Reusable Workflows — DRY dla pipeline definicji. GitLab CI: potężna platforma all-in-one (kod + CI + registry + deploy). .gitlab-ci.yml — YAML config. Stages i Jobs. GitLab Runners — shared (SaaS) lub self-managed. Include i extends — reuse configuration. Auto DevOps — automatyczny CI/CD pipeline z konwencji. Environments i review apps — deploy per branch automatycznie. Protected environments — wymagaj approval dla produkcji. CircleCI: szybkie, konfigurowalne. Orbs — reusable packages. Resource classes — wybierz CPU/RAM per job. Test splitting — rozdziel testy między N maszyn dla szybkości. Pipeline insights — analytics dotyczące pipeline. Jenkins: open-source, very customizable (ale wymaga dużo pracy operacyjnej). Groovy Pipelines (Jenkinsfile). Ogromny ekosystem pluginów. Dobre dla complex on-prem setup. Harness: enterprise-grade CD. AI-assisted deployment. Cost management, governance. Tekton (Kubernetes native): open-source, cloud-native CI/CD na K8s. Pipeline definicje jako Kubernetes CRDs. Używany przez Tekton Chains (supply chain security).

    Testy w pipeline — jak strukturyzować i optymalizować czas?

    Piramida testów w CI: Unit tests (baza): szybkie (ms), izolowane, dużo ich. Powinny kończyć się w sekundy. Integration tests (środek): testują integracje (DB, API, messaging). Minuty. E2E tests (szczyt): pełne flow użytkownika. Wolne (minuty-godziny), mało ich. Strategia optymalizacji pipeline: Fail fast ordering: unit tests najpierw (najszybsze), integration po, E2E na końcu. Parallel jobs: uruchom niezależne suity testów równolegle. Test splitting: rozdziel dużą suitę na N równoległych workerów (CircleCI, Nx). Caching: cache node_modules, Go modules, Maven dependencies między runami. Cache na podstawie lock file hash. Docker layer caching. Selective testing: uruchom tylko testy dotknięte zmianami (Nx affected, Bazel, TurboRepo). Test rezultaty i flaky tests: JUnit XML format — standard dla CI reporting. Flaky tests — losowo failing testy = erosja zaufania do CI. Wykrywaj i naprawiaj flaky tests priorytetowo. Test retry — retry N razy zanim fail (CircleCI, GitHub Actions). Quality Gates: code coverage minimum (np. 80%). Static analysis (SonarQube, CodeClimate). Linting i formatting (ESLint, Prettier, Black). Security scanning (Snyk, Trivy, Semgrep). Contract tests: Pact — consumer-driven contract tests. Testuj API kontrakt między producent a konsument bez full stack. Szczególnie ważne dla mikroserwisów i event-driven architecture.

    Deployment strategies — Blue/Green, Canary, Rolling — jak wybrać?

    Recreate: zatrzymaj starą wersję, uruchom nową. Downtime. Używaj tylko dla non-production lub mało krytycznych serwisów. Rolling Update: stopniowe zastępowanie instancji (N at a time). Kubernetes domyślna strategia. Zero downtime jeśli aplikacja backward compatible. Wada: przez chwilę działają obie wersje. Blue/Green: dwa identyczne środowiska (Blue = prod, Green = staging). Deploy na Green, przełącz ruch (DNS lub load balancer). Instant rollback — przełącz z powrotem na Blue. Wada: 2x infrastruktura, DB migration złożona. Canary Release: routing małego % ruchu (5%) do nowej wersji. Monitoruj metryki (error rate, latency). Stopniowo zwiększaj (5% → 25% → 50% → 100%). Automatyczny rollback przy degradacji. Implementacja: Kubernetes native przez Argo Rollouts lub Flagger. Nginx/Istio weighted routing. Feature Flags — nie deployment-level ale feature-level canary. A/B testing: podtyp canary — mierzysz conversion/engagement. Argo Rollouts: Kubernetes controller do zaawansowanych deployment strategies. AnalysisRun — automatyczna analiza metryk przy deployment. Flagger: progressive delivery operator. Integruje z Istio, Nginx, Linkerd. Automatyczne canary analysis. Deployment Frequency: według DORA — elite performers deployują wiele razy dziennie. Lead Time — czas od commit do produkcji (elita: poniżej godziny). Change Failure Rate — % deploymentów powodujących incident (elita poniżej 5%). Time to Restore — czas naprawy po incydencie (elita poniżej godziny).

    Supply chain security w CI/CD — SBOM, podpisywanie artefaktów, Sigstore?

    Software Supply Chain Security: ataki na pipeline CI/CD to rosnące zagrożenie (SolarWinds, Codecov, Xz backdoor 2024). SLSA Framework (Supply chain Levels for Software Artifacts): Level 1 — dokumentacja build process. Level 2 — signed provenance z CI. Level 3 — hardened build platform (isolated builds, ephemeral environments). Level 4 — hermetic, reproducible builds. Sigstore (CNCF): bezpłatna, open-source infrastruktura do podpisywania artefaktów. Cosign — podpisuj i weryfikuj Docker images. Rekor — transparency log (niemodyfikowalny audit trail podpisów). Fulcio — Certificate Authority (certyfikaty oparte na OIDC identity). Keyless signing — nie potrzebujesz long-lived keypairs — OIDC token z CI (GitHub Actions OIDC). Policy enforcement: Kyverno / OPA Gatekeeper w Kubernetes — sprawdź czy image jest podpisany zanim deploy. SBOM w CI: Syft — generuje SBOM z Docker images lub katalogów. Grype — skanuj SBOM pod kątem CVE. Trivy — container scanner + SBOM. Dependency scanning: GitHub Dependabot / Renovate Bot — automatyczne PR z aktualizacjami deps. Snyk — CVE scanning w CI. SAST (Static Application Security Testing): Semgrep, SonarQube, CodeQL (GitHub Advanced Security). Secret scanning: TruffleHog, GitGuardian, git-secrets — wykryj sekrety w kodzie przed push. GitHub secret scanning — automatyczne. Pre-commit hooks — ostatnia linia obrony przed push secretów.

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz

    Szanujemy Twoją prywatność

    Używamy plików cookies, aby zapewnić najlepsze doświadczenia na naszej stronie. Klikając "Akceptuję", zgadzasz się na ich użycie.