Co to jest CI/CD?

readTime

10 min

Co to jest CI/CD?

Spis treści

Czym jest CI/CD?

CI/CD to skrót od Continuous Integration (CI) i Continuous Delivery/Deployment (CD).

Są to praktyki i narzędzia stosowane w tworzeniu różnorodnych aplikacji. Ich główne zadanie polega na automatyzacji i usprawnianiu procesów tworzenia, testowania oraz wdrażania aplikacji.

Continuous Integration (CI)

Continuous Integration to praktyka, w której programiści regularnie łączą (integrują) swoje zmiany w kodzie do głównego repozytorium kodu (np. na GitHubie).

Każda zmiana jest automatycznie budowana i testowana, co pozwala na szybkie wykrywanie błędów i problemów z integracją.

Korzyści z CI:

  • Szybsze wykrywanie błędów.
  • Zmniejszenie ryzyka integracyjnych problemów.
  • Zwiększenie jakości kodu dzięki automatycznym testom.

Continuous Delivery (CD)

Continuous Delivery to praktyka, która rozszerza CI, aby zapewnić, że kod jest zawsze gotowy do wdrożenia na produkcję.

Chociaż kod jest gotowy do wdrożenia, sam proces wdrożenia może być uruchamiany ręcznie.

Continuous Deployment to kolejny krok, w którym każda zmiana, która przechodzi przez pipeline CI/CD, jest automatycznie wdrażana na produkcję bez konieczności interwencji człowieka.

Korzyści z CD:

  • Szybsze wdrażanie nowych funkcji i poprawek.
  • Redukcja ryzyka, że coś się zepsuje dzięki małym i częstym wdrożeniom.
  • Automatyzacja procesów, co zwiększa efektywność zespołu.

Przykład CI/CD

Wyobraź sobie, że pracujesz nad aplikacją webową. Oto jak mógłby wyglądać proces CI/CD w praktyce:

  1. Pisanie kodu: Programiści piszą kod i commitują (zatwierdzają) zmiany do głównego repozytorium (np. GitHub).

  2. Budowanie: Za każdym razem, gdy zmiana zostaje commitowana, narzędzie CI (np. Jenkins, Travis CI) automatycznie uruchamia proces budowania aplikacji.

  3. Testowanie: Po zbudowaniu aplikacji, narzędzie CI uruchamia zestaw testów automatycznych (jednostkowych, integracyjnych, itp.), aby upewnić się, że zmiany nie wprowadziły nowych błędów.

  4. Wdrożenie na środowisko testowe: Jeśli wszystkie testy przejdą pomyślnie, aplikacja jest automatycznie wdrażana na środowisko testowe (np. staging), gdzie może być ręcznie testowana przez zespół QA (Quality Assurance).

  5. Wdrożenie na produkcję (Continuous Delivery): Jeśli aplikacja przetestowana w środowisku testowym działa prawidłowo, zespół może ręcznie wdrożyć aplikację na produkcję. W przypadku Continuous Deployment, to wdrożenie odbywa się automatycznie.

Jakie są korzyści z zastosowania CI/CD?

Zastosowanie CI/CD (Continuous Integration/Continuous Delivery/Deployment) przynosi wiele korzyści zarówno dla zespołów programistycznych, jak i dla całego procesu wytwarzania oprogramowania. A dlaczego? Już wyjaśniam po kolei:

Korzyści z Continuous Integration (CI)

  1. Szybsze wykrywanie błędów: Automatyczne testowanie kodu przy każdej integracji pozwala na szybkie wykrywanie błędów, co ułatwia ich naprawę.
  2. Poprawa jakości kodu: Regularne testowanie i integracja kodu zmniejsza ryzyko wystąpienia błędów, co prowadzi do bardziej stabilnego i niezawodnego oprogramowania.
  3. Zmniejszenie ryzyka integracyjnych problemów: Częste integracje mniejszych zmian minimalizują ryzyko wystąpienia problemów związanych z integracją kodu utworzonego przez różnych programistów.
  4. Automatyzacja budowania projektu: Zautomatyzowane procesy budowania i testowania oszczędzają czas programistów i umożliwiają szybsze wprowadzanie zmian.
  5. Przejrzystość procesu: Dzięki CI zespół ma lepszy wgląd w stan projektu, co ułatwia zarządzanie i planowanie prac.

Korzyści z Continuous Delivery/Deployment (CD)

  1. Szybsze wdrażanie nowych funkcji i poprawek: Automatyzacja wdrażania pozwala na szybkie dostarczanie nowych funkcji i poprawek do użytkowników końcowych.
  2. Redukcja ryzyka: Małe, częste wdrożenia zmniejszają ryzyko wystąpienia dużych błędów na produkcji, ponieważ łatwiej jest zlokalizować i naprawić ewentualne problemy.
  3. Zwiększenie efektywności zespołu: Automatyzacja procesów wdrażania i testowania pozwala zespołowi skupić się na tworzeniu wartościowych funkcji zamiast na rutynowych zadaniach.
  4. Lepsza jakość oprogramowania: Częste wdrożenia wymuszają utrzymanie wysokiej jakości kodu, co prowadzi do bardziej stabilnego i niezawodnego produktu.
  5. Skrócenie czasu reakcji na potrzeby rynku: Możliwość szybkiego wdrażania zmian pozwala na szybsze reagowanie na potrzeby użytkowników i zmiany rynkowe.
  6. Zwiększenie zaufania do procesu: Automatyzacja i standaryzacja procesu wdrażania zwiększa zaufanie do stabilności i jakości wprowadzanych zmian.

Dodatkowe korzyści

  1. Lepsza współpraca w zespole: CI/CD promuje kulturę współpracy i wspólnej odpowiedzialności za jakość kodu i jego wdrożenie.
  2. Kontrola nad procesem: CI/CD zapewnia lepszą kontrolę nad procesem wytwarzania oprogramowania dzięki automatyzacji i standaryzacji, co ułatwia zarządzanie projektem.
  3. Szybkie testowanie nowych funkcji: Możliwość szybkiego wdrażania i testowania nowych funkcji pozwala na efektywniejsze testowanie rożnych wariantów i ciągłe doskonalenie produktu.

Co to jest Continuous Testing

Continuous Testing (CT) to praktyka w ramach DevOps i CI/CD, która polega na automatyzowaniu testów na różnych etapach cyklu życia aplikacji.

Głównym celem Continuous Testing jest wczesne wykrywanie błędów, zapewnienie wysokiej jakości tworzonego kodu oraz skrócenie czasu dostarczania nowych funkcji do użytkowników końcowych.

Co daje Continuous Testing?

  1. Automatyzacja testów:

    • Automatyzowane testy są uruchamiane na każdym etapie procesu CI/CD, od fazy developmentu, przez integrację, aż po wdrożenie na produkcję.
    • Testy te mogą obejmować różne rodzaje testów, takie jak jednostkowe, integracyjne, end-to-end, wydajnościowe czy bezpieczeństwa.
  2. Wczesne wykrywanie błędów:

    • Dzięki automatyzacji testów na wczesnym etapie cyklu życia aplikacji, błędy mogą być wykrywane i naprawiane szybciej, co zmniejsza koszty i czas naprawy.
    • Testy są uruchamiane za każdym razem, gdy wprowadzane są zmiany w kodzie, co pozwala na bieżąco monitorować jakość kodu.
  3. Stałe dostarczanie feedbacku:

    • Continuous Testing zapewnia szybki feedback dla programistów na temat jakości ich kodu, co pozwala na szybkie reagowanie na wykryte problemy.
    • Automatyczne raportowanie wyników testów pozwala na szybkie zidentyfikowanie i rozwiązanie problemów.
  4. Integracja z narzędziami CI/CD:

    • Continuous Testing jest zintegrowany z narzędziami do Continuous Integration i Continuous Delivery, takimi jak Jenkins, GitLab CI, Travis CI, CircleCI itp.
    • Integracja ta umożliwia automatyczne uruchamianie testów po każdym merge'u, push'u lub innym wydarzeniu w repozytorium.
  5. Testy na różnych środowiskach:

    • Testy mogą być uruchamiane na różnych środowiskach (np. deweloperskim, testowym, stagingowym, produkcyjnym), co pozwala na weryfikację działania aplikacji w różnych warunkach.

Przykłady narzędzi wspierających Continuous Testing:

  • Selenium: Narzędzie do automatyzacji testów przeglądarkowych.
  • JUnit: Framework do pisania i uruchamiania testów jednostkowych w Javie.
  • TestNG: Framework do testów jednostkowych i integracyjnych.
  • Jenkins: Narzędzie do Continuous Integration, które może uruchamiać automatyczne testy.
  • GitLab CI/CD: Narzędzie CI/CD, które umożliwia automatyzację testów jako część pipeline'u CI/CD.

Continuous Testing jest kluczowym elementem nowoczesnych praktyk DevOpsowych, pomagając zespołom programistycznym dostarczać wysokiej jakości kod aplikacji w szybszym tempie.

CI/CD dla początkujących

Podam Ci kilka konkretnych przykładów, które pomogą Ci wystartować z CI/CD jako początkujący programista.

1. Wybierz narzędzie do CI/CD

Na początek warto wybrać narzędzie, które będzie odpowiadać Twoim potrzebom i jest łatwe w konfiguracji.

Polecam GitHub Actions, ponieważ jest dobrze zintegrowany z GitHubem i ma dużą społeczność, gdzie możesz znaleźć wsparcie. Inne popularne narzędzia to GitLab CI/CD i CircleCI.

2. Skonfiguruj repozytorium

Załóż repozytorium na GitHubie (lub skorzystaj z istniejącego). Będziemy konfigurować CI/CD w pliku .github/workflows w Twoim repozytorium.

3. Stwórz plik konfiguracyjny CI

Dodaj plik konfiguracyjny do swojego repozytorium. Poniżej znajduje się przykład dla prostego projektu napisnego w Node.js.

Przykład dla Node.js z GitHub Actions

  1. Stwórz folder i plik konfiguracyjny: Utwórz folder .github/workflows w swoim repozytorium. W tym folderze stwórz plik ci.yml.

  2. Dodaj konfigurację: W pliku ci.yml dodaj poniższą konfigurację:

    yaml
    name: CI
    
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        - name: Checkout repository
          uses: actions/checkout@v2
    
        - name: Set up Node.js
          uses: actions/setup-node@v2
          with:
            node-version: '14'
    
        - name: Install dependencies
          run: npm install
    
        - name: Run tests
          run: npm test
    

4. Wyjaśnienie konfiguracji

  • name: CI – nazwa workflow.
  • on: – określa, kiedy workflow ma być uruchamiany. W tym przypadku na push i pull request do gałęzi main.
  • jobs: – definiuje zadania, które mają być wykonane.
    • runs-on: ubuntu-latest – wskazuje, że zadania będą uruchamiane na najnowszej wersji Ubuntu.
    • steps: – poszczególne kroki w zadaniu.
      • uses: actions/checkout@v2 – klonuje Twoje repozytorium.
      • uses: actions/setup-node@v2 – ustawia środowisko Node.js.
      • run: npm install – instaluje zależności.
      • run: npm test – uruchamia testy.

5. Dodaj testy do swojego projektu

Jeśli jeszcze nie masz testów w swoim projekcie, dodaj prosty test. Na przykład, w Node.js możesz użyć Mocha i Chai:

  1. Zainstaluj Mocha i Chai:

    sh
    npm install --save-dev mocha chai
    
  2. Dodaj skrypt testowy do package.json:

    json
    "scripts": {
      "test": "mocha"
    }
    
  3. Stwórz folder test i plik testowy test/example.test.js:

    js
    // test/example.test.js
    const { expect } = require('chai');
    
    describe('Example test', () => {
      it('should return true', () => {
        expect(true).to.be.true;
      });
    });
    

6. Przetestuj CI/CD

Gdy masz wszystko skonfigurowane, zcommituj i wypchnij zmiany do swojego repozytorium. GitHub Actions automatycznie uruchomi pipeline CI/CD. Możesz obserwować przebieg procesu w zakładce "Actions" w swoim repozytorium na GitHubie.

To podstawowe wprowadzenie do CI/CD z GitHub Actions. Na początek, to wystarczy, aby zrozumieć, jak działa automatyzacja budowania i testowania kodu.

Gdy poczujesz się bardziej komfortowo, możesz rozważyć dodanie bardziej zaawansowanych kroków, takich jak wdrażanie kodu na serwery produkcyjne, używanie różnych środowisk, czy integrowanie z innymi narzędziami.

FAQ: Co to jest CI/CD?

1. Co oznacza CI/CD?

CI/CD to skrót od Continuous Integration (CI) i Continuous Delivery/Deployment (CD). Są to praktyki w tworzeniu kodu, które automatyzują i usprawniają procesy budowania, testowania i wdrażania aplikacji.

2. Co to jest Continuous Integration (CI)?

Continuous Integration (CI) to praktyka polegająca na częstym łączeniu zmian w kodzie z główną gałęzią repozytorium. Każda zmiana jest automatycznie budowana i testowana, co pozwala na szybkie wykrywanie błędów i konflikty w kodzie.

3. Co to jest Continuous Delivery (CD)?

Continuous Delivery (CD) to podejście, w którym kod jest zawsze w stanie gotowości do wdrożenia na produkcję. Każda zmiana w kodzie przechodzi przez zestaw automatycznych testów i jest przygotowana do wdrożenia na produkcję.

4. Co to jest Continuous Deployment?

Continuous Deployment to rozszerzenie Continuous Delivery, gdzie każda zatwierdzona zmiana jest automatycznie wdrażana na produkcję bez konieczności robienia tego za każdym razem manualnie.

5. Jakie są korzyści z używania CI/CD?

  • Szybsze wykrywanie błędów: Automatyczne testy uruchamiane przy każdym commicie pomagają szybko wykrywać błędy.
  • Skrócenie czasu dostarczania oprogramowania: Automatyzacja procesów budowania, testowania i wdrażania pozwala na częstsze i szybsze wdrożenia.
  • Lepsza jakość kodu: Regularne testy i automatyczne sprawdzanie dobrych standardów programistycznych poprawiają jakość kodu.
  • Zwiększenie produktywności: Mniej czasu spędzanego na ręcznych procesach oznacza więcej czasu na rozwijanie funkcjonalności.
  • Lepsza współpraca w zespole: Robienie częstych i małych commitów ułatwia współpracę i minimalizuje ryzyko konfliktów.

6. Jakie narzędzia są popularne w CI/CD?

Popularne narzędzia do CI/CD to:

  • GitHub Actions
  • GitLab CI/CD
  • Jenkins
  • CircleCI
  • Travis CI

7. Jak zacząć z CI/CD?

  1. Wybierz narzędzie: Wybierz narzędzie CI/CD, które najlepiej pasuje do Twoich potrzeb.
  2. Skonfiguruj repozytorium: Dodaj plik konfiguracyjny CI/CD do swojego repozytorium.
  3. Automatyzacja testów: Dodaj testy do swojego projektu, aby CI/CD mogło je automatycznie uruchamiać.
  4. Pipeline CI/CD: Skonfiguruj pipeline CI/CD, który będzie obejmował kroki takie jak budowanie, testowanie i wdrażanie aplikacji.

8. Czy CI/CD jest must have dla każdego projektu?

Zastosowanie CI/CD ma wiele korzyści ale jego wdrożenie może być bardziej wymagające dla małych projektów z ograniczonymi zasobami. Tak czy inaczej, większość projektów skorzysta na automatyzacji procesów budowania i testowania kodu.

9. Jakie są wyzwania związane z CI/CD?

  • Początkowa konfiguracja: Może być czasochłonna, szczególnie dla skomplikowanych projektów.
  • Utrzymanie: Wymaga regularnej aktualizacji i monitorowania, aby zapewnić, że pipeline działa poprawnie.
  • Koszt: Niektóre narzędzia CI/CD mogą być kosztowne, zwłaszcza w dużych projektach.

10. Czy muszę być doświadczonym programistą, aby korzystać z CI/CD?

Nie, CI/CD jest dostępne i przydatne zarówno dla początkujących, jak i doświadczonych programistów. Wiele narzędzi oferuje przyjazne interfejsy i dokumentację, które pomagają w łatwym wdrożeniu CI/CD w naszych projektach.

authorImg

Witek Pruchnicki

Z pasją dzielę się wiedzą o programowaniu i nie tylko na różne sposoby