CI/CD to akronim od Continuous Integration (ciągła integracja) oraz Continuous Delivery / Continuous Deployment (ciągłe dostarczanie / ciągłe wdrażanie). Jest to zbiór nowoczesnych praktyk i filozofia z obszaru DevOps, których celem jest pełna automatyzacja procesu tworzenia, testowania i wdrażania oprogramowania. Prawidłowe wdrożenie CI/CD pozwala na radykalne przyspieszenie cyklu wydawniczego, zwiększenie niezawodności i poprawę jakości kodu w każdym profesjonalnym systemie informatycznym.
Ciągła integracja to praktyka, w której deweloperzy często (przynajmniej raz dziennie) integrują swoje zmiany w kodzie z głównym, współdzielonym repozytorium (np. w gałęzi `main` w Gicie). Każda taka zmiana automatycznie uruchamia potok CI, który wykonuje serię zadań, takich jak kompilacja kodu, budowanie artefaktu (np. obrazu Docker) oraz uruchamianie testów jednostkowych i integracyjnych. Głównym celem CI jest jak najszybsze wykrywanie błędów i regresji. Jeśli którykolwiek z kroków zawiedzie, zespół otrzymuje natychmiastową informację zwrotną, co pozwala na błyskawiczną naprawę.
Część "CD" jest naturalnym rozwinięciem praktyk CI i koncentruje się na automatyzacji procesu wydawniczego.
W nowoczesnych systemach potoki CI/CD są definiowane jako kod (Pipeline as Code), najczęściej w plikach YAML. Poniżej znajduje się prosty przykład potoku dla GitHub Actions.
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Run unit tests
run: mvn test
Rynek oferuje wiele dojrzałych narzędzi do budowy potoków CI/CD. Do najpopularniejszych należą GitHub Actions (zintegrowane z GitHubem), GitLab CI/CD (integralna część GitLaba) oraz Jenkins – niezwykle elastyczny i rozszerzalny serwer automatyzacji, który od lat jest standardem w wielu organizacjach budujących dedykowany system.
Podsumowując, wdrożenie praktyk CI/CD jest kluczowym elementem nowoczesnego procesu wytwarzania oprogramowania. Automatyzacja pozwala na szybsze dostarczanie wartości biznesowej, znacząco redukuje ryzyko związane z wdrożeniami i pozwala deweloperom skupić się na tym, co najważniejsze – tworzeniu wysokiej jakości kodu.