encyklopedia.space

CI/CD

CI/CD (ang. Continuous Integration / Continuous Delivery lub Continuous Deployment) to zestaw praktyk i narzędzi umożliwiających automatyzację etapów budowy, testowania oraz wdrażania oprogramowania. Dzięki CI/CD możliwe jest szybkie i bezpieczne wprowadzanie zmian w kodzie źródłowym, co przyspiesza dostarczanie wartości użytkownikom końcowym.

Historia

Pierwsze koncepcje ciągłej integracji pojawiły się na przełomie 2000 i 2005 roku w środowiskach Agile oraz Extreme Programming. Termin „Continuous Delivery” został spopularyzowany przez D. Humble i M. Farley w książce Continuous Delivery (2010). Rozwój konteneryzacji (Docker) i orkiestracji (Kubernetes) przyczynił się do powstania praktyki Continuous Deployment pod koniec 2010 roku.

Składowe CI/CD

  • Ciągła integracja (CI) – zestaw praktyk polegających na regularnym łączeniu (merge) zmian w repozytorium kodu, po którym automatycznie uruchamiane są testy jednostkowe i integracyjne. Najczęściej wykorzystywane systemy to Jenkins, GitLab CI oraz GitHub Actions.
  • Ciągłe dostarczanie (CD – Delivery) – automatyzacja procesów budowy artefaktów, ich testowania w środowiskach testowych oraz przygotowanie do wdrożenia w środowisku produkcyjnym.
  • Ciągłe wdrażanie (CD – Deployment) – pełna automatyzacja publikacji artefaktu w środowisku produkcyjnym po przejściu wszystkich testów i zatwierdzeń.

Korzyści

Wdrożenie CI/CD przynosi wiele korzyści, w tym:

  • Skrócenie czasu pomiędzy napisaniem kodu a jego wdrożeniem (time‑to‑market).
  • Wczesne wykrywanie błędów dzięki automatycznym testom.
  • Zwiększenie stabilności i jakości oprogramowania.
  • Umożliwienie zespołom DevOps szybkiego reagowania na zmiany rynkowe.
  • Lepsza przejrzystość procesu dzięki raportom i dashboardom.

Typowy przepływ pracy

  1. Programista wprowadza zmiany w kodzie i commituje je do branży w systemie kontroli wersji (Git).
  2. Serwer CI wykrywa nowy commit i uruchamia pipeline – ciąg zadań obejmujących kompilację, testy jednostkowe i statyczną analizę kodu.
  3. Po pomyślnym zakończeniu testów powstaje artefakt (np. obraz Docker).
  4. Artefakt jest wdrażany do środowiska staging, gdzie przeprowadzane są testy integracyjne i akceptacyjne.
  5. Po zatwierdzeniu zmiany mogą zostać automatycznie wypuszczone do produkcji (Continuous Deployment) lub oczekują na ręczną akceptację (Continuous Delivery).

Narzędzia

Poniżej przedstawiono wybrane narzędzia wykorzystywane w praktyce CI/CD:

Narzędzie Typ Opis
Jenkins Serwer CI Open‑source’owy serwer automatyzacji, obsługuje liczne pluginy.
GitLab CI Serwer CI/CD Zintegrowany z platformą GitLab, wspiera definicje pipeline w pliku .gitlab-ci.yml.
GitHub Actions Serwer CI/CD Rozwiązanie wbudowane w GitHub, pozwala na definiowanie workflow w pliku .github/workflows.
Azure Pipelines Serwer CI/CD Platforma chmurowa od Microsoft, umożliwia budowę i wdrożenia aplikacji na wiele środowisk.
CircleCI Serwer CI Usługa SaaS, koncentruje się na szybkim wykonywaniu testów i budowie kontenerów.

Najlepsze praktyki

  • Małe, częste zmiany – częste commity ograniczają ryzyko konfliktów.
  • Automatyczne testy – każdy commit powinien przejść zestaw testów jednostkowych, integracyjnych oraz statycznej analizy kodu.
  • Izolowane środowiska – korzystanie z kontenerów (Docker) lub maszyn wirtualnych zapewnia powtarzalność środowisk testowych.
  • Wersjonowanie artefaktów – każdy zbudowany artefakt powinien mieć unikalny numer wersji (np. SemVer).
  • Monitorowanie i rollback – po wdrożeniu monitoruj aplikację i przygotuj mechanizmy szybkiego wycofania zmian.

Związek z DevOps i Agile

CI/CD jest kluczowym elementem kultury DevOps, ponieważ łączy procesy rozwoju (development) i operacji (operations) w jednolitą, zautomatyzowaną ścieżkę dostarczania oprogramowania. W środowiskach Agile umożliwia spełnianie założeń krótkich iteracji i szybkiego reagowania na zmieniające się wymagania.

Przykładowy plik konfiguracyjny (GitLab CI)

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - docker build -t myapp:${CI_COMMIT_SHA} .
  artifacts:
    paths:
      - myapp-image.tar

test_job:
  stage: test
  script:
    - docker run --rm myapp:${CI_COMMIT_SHA} npm test

deploy_job:
  stage: deploy
  script:
    - docker push myapp:${CI_COMMIT_SHA}
    - kubectl set image deployment/myapp myapp=myregistry/myapp:${CI_COMMIT_SHA}
  only:
    - main

Podsumowanie

CI/CD stanowi fundament nowoczesnego tworzenia oprogramowania, pozwalając zespołom na szybkie, powtarzalne i bezpieczne dostarczanie wartości. Dzięki automatyzacji kluczowych etapów – od integracji kodu po jego wdrożenie – organizacje zwiększają efektywność, skracają cykle rozwojowe i podnoszą jakość produktów cyfrowych.