Oto pełna definicja pojęcia CI/CD, fundamentalnego filaru współczesnej kultury DevOps, uporządkowana zgodnie z polem „Długa definicja”.
Pełna definicja CI/CD
CI/CD to metoda dystrybucji oprogramowania oparta na automatyzacji każdego etapu rozwoju. Skrót ten składa się z dwóch nieodłącznych części:ciągłej integracji (CI) i ciągłej dystrybucji/wdrażania (CD).
Celem jest umożliwienie programistom częstego publikowania aktualizacji w sposób niezawodny i bez ryzykownych interwencji ręcznych.
1. CI: Ciągła integracja (Continuous Integration)
Kiedy programista modyfikuje kod, „przesyła” go do wspólnego repozytorium (takiego jak GitHub). CI automatycznie uruchamia wtedy:
- Budowa (Build): Kompilacja kodu w celu sprawdzenia, czy nie zawiera on błędów składniowych.
- Testy jednostkowe: wykonywanie automatycznych testów w celu upewnienia się, że nowe zmiany nie zakłócają działania istniejących funkcji.
- Walidacja: weryfikacja jakości kodu i zgodności z normami bezpieczeństwa.
2. CD: Ciągłe dostarczanie i wdrażanie (Continuous Delivery/Deployment)
Po zatwierdzeniu kodu przez fazę CI, część CD przejmuje kontrolę:
- Continuous Delivery: Kod jest automatycznie przygotowywany do wdrożenia, ale wprowadzenie go do produkcji wymaga ostatecznej weryfikacji przez człowieka.
- Ciągłe wdrażanie: każda zmiana, która przejdzie testy, jest natychmiast wysyłana do produkcji bez żadnej ręcznej interwencji.
Dlaczego jest to rewolucja?
Przed wprowadzeniem CI/CD aktualizacje były przeprowadzane co miesiąc „dużymi falami” i zawierały wiele błędów. Dzięki CI/CD:
- Ograniczenie ryzyka: Błędy wykrywa się w ciągu kilku minut, a nie kilku tygodni.
- Szybkość: nowe funkcje trafiają do użytkownika szybciej.
- Spokój: Wdrożenia w piątek wieczorem nie są już źródłem stresu, ponieważ wszystko jest zautomatyzowane i przetestowane.
Technologie i narzędzia
Aby wdrożyć proces CI/CD, zazwyczaj wykorzystuje się:
- Narzędzia potokowe: GitHub Actions, GitLab CI, Jenkins lub CircleCI.
- Konteneryzacja: Docker (aby zapewnić, że kod działa wszędzie w ten sam sposób).
- Orkiestracja: Kubernetes.