CI/CD (Continuous Integration / Continuous Deployment) to metodologia automatyzacji procesów tworzenia, testowania i wdrażania aplikacji. Dzięki niej zespoły deweloperskie mogą szybciej i sprawniej dostarczać nowe funkcje, poprawki oraz aktualizacje.
Continuous Integration (CI) polega na regularnym łączeniu zmian w kodzie do wspólnego repozytorium i ich automatycznym testowaniu.
Continuous Deployment (CD) to proces, w którym przetestowany kod jest automatycznie wdrażany na serwer produkcyjny, eliminując konieczność ręcznej ingerencji.
Spis treści
Korzyści stosowania CI/CD
- Skrócenie czasu wdrażania zmian – automatyzacja pozwala na szybsze dostarczanie nowych funkcji.
- Redukcja błędów – automatyczne testy wykrywają problemy przed wdrożeniem.
- Lepsza jakość kodu – częste iteracje i testy pomagają utrzymać wysoką jakość aplikacji.
- Łatwiejsze wykrywanie błędów – szybkie identyfikowanie przyczyny problemów.
- Zwiększona stabilność – dzięki testom regresji i automatycznym wdrożeniom aplikacja działa stabilniej.
Kluczowe elementy CI/CD
- Repozytorium kodu źródłowego – np. GitHub, GitLab, Bitbucket.
- Automatyczne testowanie – testy jednostkowe, integracyjne, akceptacyjne.
- System CI/CD – np. GitHub Actions, GitLab CI/CD, Jenkins, CircleCI.
- Środowiska wdrożeniowe – staging (testowe), produkcyjne.
- Monitorowanie – logowanie, alerty, analizy wydajności.
Jak wdrożyć CI/CD w praktyce?
1. Wybór narzędzi
Popularne narzędzia CI/CD:
- Jenkins – otwarte oprogramowanie do automatyzacji procesów.
- GitLab CI/CD – zintegrowane narzędzie w GitLab.
- GitHub Actions – CI/CD dla repozytoriów GitHub.
- CircleCI, Travis CI – usługi CI/CD w chmurze.
2. Tworzenie pipeline’u CI/CD
Pipeline CI/CD składa się z kilku etapów:
- Commit & Push – zmiany w kodzie są wysyłane do repozytorium.
- Build – kompilacja aplikacji.
- Testy – automatyczne testy jednostkowe, integracyjne.
- Deployment – wdrożenie kodu na środowisko staging/produkcyjne.
- Monitorowanie – sprawdzanie poprawności wdrożenia.
3. Przykładowa konfiguracja GitHub Actions
Plik .github/workflows/ci-cd.yml
:
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Pobranie repozytorium
uses: actions/checkout@v3
- name: Instalacja zależności
run: npm install
- name: Budowanie aplikacji
run: npm run build
- name: Testy jednostkowe
run: npm test
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Wdrożenie na serwer
run: |
ssh user@server "cd /app && git pull && npm install && pm2 restart app"
4. Automatyczne testowanie
- Testy jednostkowe – sprawdzają pojedyncze funkcje.
- Testy integracyjne – sprawdzają współpracę modułów.
- Testy e2e (end-to-end) – testują całą aplikację.
Przykładowy test w Jest:
test('Sprawdzenie poprawnego dodawania', () => {
expect(2 + 2).toBe(4);
});
5. Wdrożenie na serwer produkcyjny
Możemy użyć Docker, Kubernetes lub skryptów SSH do wdrożenia.
Przykładowe wdrożenie z Docker Compose:
version: '3'
services:
app:
image: my-app:latest
ports:
- "80:80"
Najlepsze praktyki CI/CD
- Wdrażaj małe zmiany – łatwiej wykryć błędy.
- Automatyzuj testowanie – każda zmiana powinna przejść przez testy.
- Monitoruj wdrożenia – np. Prometheus, Grafana.
- Zabezpiecz pipeline – kontroluj uprawnienia, używaj skanerów bezpieczeństwa.
Podsumowanie
CI/CD to kluczowa praktyka w nowoczesnym developmentcie, która przyspiesza wdrażanie kodu i zwiększa jego jakość. Dzięki automatyzacji testów i deploymentu firmy mogą dostarczać aplikacje szybciej i bezpieczniej. Warto wdrożyć CI/CD w swoim projekcie, by poprawić efektywność pracy zespołu.