Automatyzacja metodyki DevOps za pomocą potoków CI/CD GitLaba. Buduj efektywne potoki CI/CD do weryfikacji, zabezpieczenia i wdrażania kodu, korzystając z rzeczywistych przykładów
SPIS TREŚCI
O autorach
O recenzentach
Przedmowa
CZĘŚĆ 1. Rozpoczęcie pracy z DevOps, Gitem i GitLabem
Rozdział 1. Zrozumienie okresu przed DevOps
Wprowadzenie do aplikacji internetowej Hats for Cats
Ręczne tworzenie i weryfikacja kodu
Ręczne budowanie kodu
Ręczna weryfikacja kodu
Dodatkowe wyzwania związane z weryfikacją kodu
Ręczne przeprowadzanie testów bezpieczeństwa kodu
Statyczna analiza kodu
Wykrywanie tajemnic
Analiza dynamiczna
Skanowanie zależności
Skanowanie kontenerów
Podsumowanie ręcznych testów bezpieczeństwa
Ręczne pakowanie i wdrażanie kodu
Skanowanie zgodności licencji
Wdrażanie oprogramowania
Problemy z ręcznymi praktykami w cyklu życia oprogramowania
Rozwiązywanie problemów za pomocą DevOps
Jak GitLab implementuje DevOps
Podsumowanie
Rozdział 2. Ćwiczenie podstawowych poleceń Gita
Wymagania techniczne
Dlaczego korzystać z Gita?
Czym jest system kontroli wersji?
Jakie problemy rozwiązuje system kontroli wersji?
Dlaczego Git jest popularny
Wady Gita
Zatwierdzanie kodu, aby zachować go w bezpiecznym miejscu
Wyłączenie plików z repozytorium
Oznaczanie zatwierdzeń w celu identyfikowania wersji kodu
Tworzenie gałęzi, aby rozwijać kod w oddzielnym miejscu
Komendy Gita do zarządzania gałęziami
Obsługa konfliktów scalania
Synchronizacja lokalnych i zdalnych kopii repozytoriów
„Złote” repozytorium
Konfigurowanie zdalnych repozytoriów
Wypychanie zatwierdzeń
Pobieranie fetch
Pobieranie pull
Dodatkowe źródła do nauki Gita
Podsumowanie
Rozdział 3. Zrozumienie komponentów GitLaba
Wymagania techniczne
Kładziemy nacisk na „dlaczego” bardziej niż na „jak”
Wprowadzenie do platformy GitLaba
Czym jest GitLab?
Jaki problem rozwiązuje GitLab?
Etapy weryfikacji, zabezpieczania i wydawania
Organizowanie pracy w projekty i grupy
Przykład – organizacja pracy nad projektem Hats for Cats
Śledzenie pracy za pomocą zgłoszeń
Struktura zgłoszenia w GitLabie
Rodzaje zadań, które mogą być reprezentowane przez zgłoszenia
Etykiety
Schematy pracy ze zgłoszeniami
Bezpieczne edytowanie plików za pomocą zatwierdzeń, gałęzi i próśb o scalenie
Historia zatwierdzeń
Łączenie jednej gałęzi Gita z drugą
Trzej amigos – zgłoszenia, gałęzie i prośby o scalenie
Kiedy dwóch amigos wystarcza
Czym różnią się zgłoszenia i prośby o scalenie?
Korzystanie z praktyk DevOps za pomocą GitLab Flow
Podsumowanie
Rozdział 4. Opis struktury potoku CI/CD GitLaba
Wymagania techniczne
Definicje pojęć: „potok”, „CI” i „CD”
Czym jest potok
Definiowanie jednego potoku na projekt
Wyjaśnienie różnych znaczeń terminu „potok”
Przeglądanie listy potoków
CI – dowiedz się, czy Twój kod jest dobry
CD – dowiedz się, gdzie powinien trafić Twój kod (i umieść go tam)
GitLab Runnery
Elementy potoku – etapy, zadania i polecenia
Etapy
Zadania
Polecenia
Łączenie elementów potoku
Uruchamianie potoków CI/CD GitLaba
Potoki dla gałęzi (ang. branch pipelines)
Potoki dla tagów Gita
Inne rodzaje potoków
Pomijanie potoków
Odczytywanie statusów potoków CI/CD GitLaba
Konfigurowanie potoków CI/CD GitLaba
Podsumowanie
CZĘŚĆ 2. Automatyzacja etapów DevOps przy użyciu potoków CI/CD GitLaba
Rozdział 5. Instalacja i konfiguracja GitLab Runnerów
Wymagania techniczne
Definicja GitLab Runnerów i ich związek z CI/CD
GitLab Runner to aplikacja open source napisana w języku Go
GitLab Runner uruchamia zadania CI/CD określone w pliku .gitlab-ci.yml
Architektura runnera i obsługiwane platformy
GitLab Runner jest obsługiwany przez większość platform i architektur
Runnery mogą być specyficzne dla projektu, grupy lub współdzielone
Każdy runner ma zdefiniowanego executora
Tagi runnera określają, które runnery mogą wykonywać konkretne zadania
Instalacja agenta runnera
Instalacja GitLab Runnera
Rejestracja runnera w GitLabie
Rozważania dotyczące różnych typów runnerów i executorów
Rozważania dotyczące wydajności
Rozważania dotyczące bezpieczeństwa
Rozważania dotyczące monitorowania
Podsumowanie
Rozdział 6. Weryfikacja kodu
Wymagania techniczne
Budowanie kodu w potoku CI/CD
Kompilacja kodu Java za pomocą javac
Kompilacja Javy przy użyciu narzędzia Maven
Kompilacja języka C przy użyciu narzędzia GNU Compiler Collection (GCC)
Przechowywanie skompilowanego kodu jako artefaktów
Sprawdzanie jakości kodu w potoku CI/CD
Włączanie funkcji jakości kodu
Przeglądanie wyników funkcji jakości kodu
Uruchamianie automatycznych testów funkcjonalnych na etapie dostarczania (CI/CD)
Włączanie automatycznych testów funkcjonalnych
Przeglądanie wyników automatycznych testów funkcjonalnych
Testy fuzzingowe w potoku CI/CD
Architektura i przepływ pracy testowania fuzzingowego
Przepływ pracy testowania fuzzingowego
Przeglądanie wyników testów fuzzingu
Dodatkowe uwagi dotyczące testowania fuzzingu
Testowanie fuzzingu z korpusem
Sprawdzanie dostępności w procesie CI/CD
Dodawanie testów dostępności
Przeglądanie wyników testów dostępności
Dodatkowe sposoby weryfikacji kodu
Pokrycie kodu (ang. code coverage)
Testowanie wydajności przeglądarki (ang. browser performance testing)
Testowanie wydajności obciążeniowej (ang. load performance testing)
Podsumowanie
Rozdział 7. Zabezpieczanie kodu
Wymagania techniczne
Zrozumienie strategii skanowania bezpieczeństwa GitLaba
GitLab korzysta ze skanerów open source
Skanery są dostarczane jako obrazy Dockera
Niektóre skanery używają różnych analizatorów dla różnych języków programowania
Podatności nie zatrzymują potoku
Wyniki pojawiają się w trzech różnych raportach
Potoki mogą korzystać ze skanerów innych niż GitLab
Korzystanie z SAST-a do skanowania kodu źródłowego pod kątem podatności
Włączanie SAST-a
Konfigurowanie SAST-a
Przeglądanie wyników SAST-a
Użycie wykrywania sekretów do znalezienia poufnych informacji w Twoim repozytorium
Zrozumienie działania wykrywania sekretów
Włączanie i konfigurowanie wykrywania sekretów
Przeglądanie wyników wykrywania sekretów
Korzystanie z DAST-a do wykrywania podatności w aplikacjach internetowych
Zrozumienie działania DAST-a
Włączanie i konfigurowanie DAST-a
Przegląd wyników DAST-a
Korzystanie ze skanowania zależności do wyszukiwania luk w zależnościach
Zrozumienie skanowania zależności
Włączanie i konfigurowanie skanowania zależności
Przeglądanie wyników skanowania zależności
Korzystanie ze skanowania kontenerów do wyszukiwania podatności w obrazach Dockera
Zrozumienie skanowania zależności
Włączanie i konfigurowanie skanowania kontenerów
Przeglądanie wyników skanowania kontenerów
Korzystanie z badania zgodności licencji do zarządzania licencjami zależności
Zrozumienie badania zgodności licencji
Włączanie i konfigurowanie badania zgodności z licencją
Przeglądanie wyników badania zgodności z licencją
Korzystanie ze skanowania IaC do wykrywania problemów w plikach konfiguracyjnych infrastruktury
Zrozumienie skanowania IaC
Włączanie i konfigurowanie skanowania IaC
Przeglądanie wyników skanowania IaC
Zrozumienie różnych rodzajów raportów bezpieczeństwa
Zarządzanie podatnościami związanymi z bezpieczeństwem
Integracja z zewnętrznymi skanerami bezpieczeństwa
Podsumowanie
Rozdział 8. Pakowanie i wdrażanie kodu
Wymagania techniczne
Przechowywanie kodu w rejestrze pakietów GitLaba w celu późniejszego wykorzystania
Lokalizacja rejestrów kontenerów i pakietów GitLaba
Rozpoczęcie pracy z rejestrem pakietów
Obsługiwane formaty pakietów
Uwierzytelnianie w rejestrze
Budowanie i publikowanie pakietów w rejestrze pakietów
Budowanie i przesyłanie pakietów do rejestru kontenerów
Przechowywanie kodu w rejestrach kontenerów i pakietów GitLaba w celu późniejszego wdrożenia
Korzystanie z obrazów z rejestru kontenerów
Wykorzystanie pakietów z rejestru pakietów
Wdrażanie w różnych środowiskach przy użyciu GitLab Flow
Wdrażanie w narzędziu review app w celu testowania
Wdrażanie w rzeczywistych środowiskach produkcyjnych
Wdrażanie w klastrze Kubernetes
Proces CI/CD
Podejście GitOps
Podsumowanie
CZĘŚĆ 3. Następne kroki w doskonaleniu aplikacji za pomocą GitLaba
Rozdział 9. Poprawa szybkości i łatwości utrzymania potoku CI/CD
Przyspieszanie procesów za pomocą skierowanych grafów acyklicznych i architektury rodzic – dziecko
Jak utworzyć DAG w potoku CI?
Budowanie kodu dla wielu architektur
Kiedy i jak wykorzystywać pamięć podręczną lub artefakty?
Charakterystyka pamięci podręcznej
Charakterystyka artefaktów
Korzystanie z pamięci podręcznej
Korzystanie z artefaktów
Wykorzystywanie artefaktów jako zależności zadania
Redukowanie powtarzającego się kodu konfiguracyjnego za pomocą zakotwiczeń i słowa kluczowego extends
Zakotwiczenia
Słowo kluczowe extends:
Tagi referencji
Poprawa zarządzalności poprzez łączenie wielu potoków oraz wykorzystywanie potoków macierzystych i potomnych
Łączenie plików dla ułatwienia zarządzania
Użycie opcji include: w celu uzyskania możliwości ponownego wykorzystania
Dołączanie zdalnych zasobów
Wykorzystywanie potoków macierzystych
Zabezpieczanie i przyspieszanie zadań za pomocą kontenerów utworzonych w celu realizacji określonych zadań
Przykład kontenera utworzonego w celu realizacji określonego zadania
Podsumowanie
Rozdział 10. Poszerzanie zakresu potoków CI/CD
Wykorzystywanie potoków CI/CD do wykrywania problemów wydajnościowych
Jak zintegrować przeglądarkowe testy wydajnościowe?
Jak zintegrować testy obciążeniowe z użyciem narzędzia k6?
Korzystanie z flag funkcji umożliwiających wydawanie różnych aplikacji w zależności od decyzji biznesowych
Jak skonfigurować aplikację pod kątem flag funkcji?
Integracja narzędzi innych firm z potokami CI/CD
Tworzenie pliku Dockerfile dla kontenera narzędziowego
Automatyzacja procesu budowy kontenera
Skanowanie kontenerów
Wywoływanie narzędzia zewnętrznego
Wykorzystywanie potoków CI/CD do tworzenia aplikacji mobilnych
Wymagania
Fastlane
Fastlane – wdrożenie
Fastlane – automatyzacja testowania
Podsumowanie
Rozdział 11. Kompletny przykład
Wymagania techniczne
Konfiguracja środowiska
Tworzenie projektu w GitLabie
Planowanie pracy za pomocą zgłoszeń GitLaba
Konfiguracja lokalnego repozytorium Gita
Tworzenie kodu
Tworzenie gałęzi Gita
Tworzenie żądania MR
Zatwierdzanie i przesyłanie kodu
Tworzenie infrastruktury potoku
Tworzenie potoku
Tworzenie runnera
Weryfikacja kodu
Dodawanie testów funkcjonalnych do potoku
Dodawanie skanowania jakości kodu do potoku
Dodawanie testu typu fuzzing do potoku
Zabezpieczanie kodu
Dodawanie SAST-a do potoku
Dodawanie wykrywania sekretów do potoku
Dodawanie skanowania zależności do potoku
Dodawanie badania zgodności licencji do potoku
Integracja zewnętrznego skanera bezpieczeństwa z potokiem
Doskonalenie potoku
Korzystanie z DAG-a w celu przyspieszenia potoku
Podział potoku na kilka plików
Dostarczanie kodu do odpowiedniego środowiska
Wdrażanie kodu
Podsumowanie
Rozdział 12. Rozwiązywanie problemów i przyszłość GitLaba
Wymagania techniczne
Rozwiązywanie problemów i najlepsze praktyki dotyczące powszechnych problemów spotykanych w potokach CI/CD
Rozwiązywanie problemów związanych ze składnią i logiką CI/CD
Rozwiązywanie problemów z działaniem potoku i przypisaniem runnera
Zarządzanie infrastrukturą operacyjną przy użyciu GitOpsa
Użycie Terraforma do wdrażania i aktualizowania stanu infrastruktury
Użycie Ansible’a do zarządzania konfiguracjami zasobów
Przyszłe trendy
Automatyzacja stworzy więcej oprogramowania na większą skalę
Abstrakcja prowadzi do modeli biznesowych opartych na pojęciu „wszystko jako kod”
Skrócony czas cyklu rozwoju produktu pomoże zespołom wydawać lepsze oprogramowanie szybciej
Podsumowanie i kolejne kroki
Opinie
Na razie nie ma opinii o produkcie.