Ciągłe dostarczanie oprogramowania. Kompletny przewodnik - ebook
Ciągłe dostarczanie oprogramowania. Kompletny przewodnik - ebook
Pojęcie ciągłego dostarczania wywodzi się z metodyk zwinnego wytwarzania oprogramowania. Polega ono na sprawnej analizie i optymalizacji procesu prowadzącego do udostępnienia oprogramowania oraz na zintegrowaniu go z rozwojem produktu. Dzięki usprawnieniu tych prac proces udostępniania oprogramowania ulega automatyzacji, staje się bardziej powtarzalny i o wiele mniej ryzykowny, a to spotyka się z aprobatą klientów.
Niniejsza książka jest wartościowym przewodnikiem dla zespołów projektowych. Docenią ją zwłaszcza programiści i menedżerowie pracujący według zasad DevOps. Przedstawiono tu podstawowe procesy, wymagania, korzyści i konsekwencje techniczne. Pokazano, w jaki sposób należy implementować potoki i zarządzać nimi. Dzięki lekturze tej książki płynne integrowanie ciągłego dostarczania z architekturą oprogramowania i pracą działów informatycznych stanie się o wiele łatwiejsze. Opisano tu również przykładowe projekty, które stanowią punkt wyjścia do samodzielnych eksperymentów, a nawet do tworzenia własnych potoków ciągłego dostarczania.
Najważniejsze zagadnienia przedstawione w książce:
- ciągłe dostarczanie: co to jest i jakie problemy rozwiązuje,
- automatyzacja tworzenia oprogramowania,
- testy: akceptacyjne, wydajności i eksploracyjne,
- wdrażanie metodyki ciągłego dostarczania w organizacji,
- wpływ ciągłego dostarczania na architekturę aplikacji.
Ciągłe dostarczanie oprogramowania kluczem do optymalizacji pracy z kodem.
Eberhard Wolff od przeszło 15 lat zajmuje się architekturą oprogramowania i doradztwem w obszarze styku biznesu i technologii. Wygłaszał prelekcje i przemówienia na międzynarodowych konferencjach, był członkiem komisji programowych wielu sympozjów. Napisał ponad 100 artykułów i książek. Koncentruje się na nowoczesnych architekturach, często obejmujących chmurę, ciągłe dostarczanie, DevOps, mikrousługi i bazy typu NoSQL.
Spis treści
- Podziękowania
- O autorze
- Wprowadzenie
- W.1. Przegląd ciągłego dostarczania i książki
- W.2. Po co stosować ciągłe dostarczanie?
- W.2.1. Krótka historia
- W.2.2. Ciągłe dostarczanie jest pomocne
- W.3. Dla kogo przeznaczona jest ta książka?
- W.4. Przegląd rozdziałów
- W.5. Sposoby czytania książki
- Część I Podstawy
- Rozdział 1 Ciągłe dostarczanie co i jak
- 1.1. Wprowadzenie czym jest ciągłe dostarczanie?
- 1.2. Dlaczego udostępnianie oprogramowania jest tak skomplikowane?
- 1.2.1. Ciągła integracja daje nadzieję
- 1.2.2. Powolne i ryzykowne procesy
- 1.2.3. Szybka praca jest możliwa
- 1.3. Wartość ciągłego dostarczania
- 1.3.1. Regularność
- 1.3.2. Możliwość śledzenia i sprawdzalność zmian
- 1.3.3. Regresja
- 1.4. Korzyści płynące z ciągłego dostarczania
- 1.4.1. Ciągłe dostarczanie w celu przyspieszenia udostępniania
- 1.4.2. Przykład
- 1.4.3. Implementowanie funkcji i udostępnianie jej w środowisku produkcyjnym
- 1.4.4. Przejście do następnej funkcji
- 1.4.5. Ciągłe dostarczanie zapewnia przewagę konkurencyjną
- 1.4.6. Scenariusz bez ciągłego dostarczania
- 1.4.7. Ciągłe dostarczanie i Lean Startup
- 1.4.8. Wpływ na proces rozwoju produktu
- 1.4.9. Minimalizowanie ryzyka za pomocą ciągłego dostarczania
- 1.4.10. Szybsze informacje zwrotne i podejście Lean
- 1.5. Procesy generowania i struktura potoku ciągłego dostarczania
- 1.5.1. Przykład
- 1.6. Wnioski
- Rozdział 2 Zapewnianie infrastruktury
- 2.1. Wprowadzenie
- 2.1.1. Automatyzowanie infrastruktury przykład
- 2.2. Skrypty instalacyjne
- 2.2.1. Problemy związane ze standardowymi skryptami instalacyjnymi
- 2.3. Chef
- 2.3.1. Chef a Puppet
- 2.3.2. Inne możliwości
- 2.3.3. Podstawy techniczne
- Podstawowe pojęcia związane z Chefem
- Chef, księgi receptur i receptury
- Role
- 2.3.4. Chef Solo
- 2.3.5. Chef Solo wnioski
- 2.3.6. Knife i Chef Server
- 2.3.7. Chef Server wnioski
- 2.4. Vagrant
- 2.4.1. Przykład zastosowania Chefa i Vagranta
- 2.4.2. Vagrant wnioski
- 2.5. Docker
- 2.5.1. Rozwiązanie oparte na Dockerze
- Kontenery Dockera a wirtualizacja
- Cel używania Dockera
- Komunikacja między kontenerami Dockera
- 2.5.2. Tworzenie kontenerów Dockera
- Pliki Dockerfile
- Tworzenie i uruchamianie obrazów Dockera
- 2.5.3. Uruchamianie przykładowej aplikacji za pomocą Dockera
- Dodatkowe polecenia Dockera
- 2.5.4. Docker i Vagrant
- Vagrant jako mechanizm dodawania oprogramowania
- 2.5.5. Docker Machine
- 2.5.6. Tworzenie złożonych konfiguracji za pomocą Dockera
- Docker Registry
- Docker w klastrze
- 2.5.7. Docker Compose
- 2.5.1. Rozwiązanie oparte na Dockerze
- 2.6. Niemodyfikowalny serwer
- 2.6.1. Wady idempotencji
- 2.6.2. Serwer niemodyfikowalny i Docker
- 2.7. Infrastruktura jako kod
- 2.7.1. Testowanie infrastruktury w postaci kodu
- Serverspec
- Test Kitchen
- ChefSpec
- 2.7.1. Testowanie infrastruktury w postaci kodu
- 2.8. Platforma jako usługa
- 2.9. Obsługa danych i baz
- 2.9.1. Zarządzanie schematami
- 2.9.2. Dane testowe i główne
- 2.10. Wnioski
- 2.1. Wprowadzenie
- Część II Potok ciągłego dostarczania
- Rozdział 3 Automatyzacja procesu budowania i ciągła integracja
- 3.1. Wprowadzenie
- 3.1.1. Automatyzacja procesu budowania przykład
- 3.2. Automatyzowanie procesu budowania i narzędzia do budowania
- 3.2.1. Narzędzia do budowania w świecie Javy
- 3.2.2. Ant
- 3.2.3. Maven
- Kontrola wersji i snapshoty
- Udostępnianie z użyciem Mavena
- 3.2.4. Gradle
- Gradle Wrapper
- 3.2.5. Dodatkowe narzędzia do budowania
- 3.2.6. Wybór odpowiedniego narzędzia
- 3.3. Testy jednostkowe
- 3.3.1. Pisanie dobrych testów jednostkowych
- 3.3.2. Programowanie sterowane testami
- 3.3.3. Ruchy Clean Code i Software Craftsmanship
- 3.4. Ciągła integracja
- 3.4.1. Jenkins
- Rozszerzanie Jenkinsa za pomocą wtyczek
- Wtyczka SCM Sync Configuration
- Wtyczka Environment Injector
- Wtyczka Job Configuration History
- Wtyczka Clone Workspace SCM
- Wtyczka Build Pipeline
- Wtyczka Amazon EC2
- Wtyczka Job DSL
- Tworzenie własnych wtyczek
- 3.4.2. Infrastruktura do ciągłej integracji
- 3.4.3. Wnioski
- 3.4.1. Jenkins
- 3.5. Pomiar jakości kodu
- 3.5.1. SonarQube
- Integrowanie z potokiem
- 3.5.1. SonarQube
- 3.6. Zarządzanie artefaktami
- 3.6.1. Integracja z procesem budowania
- 3.6.2. Zaawansowane funkcje repozytoriów
- 3.7. Wnioski
- 3.1. Wprowadzenie
- Rozdział 4 Testy akceptacyjne
- 4.1. Wprowadzenie
- 4.1.1. Testy akceptacyjne przykład
- 4.2. Piramida testów
- 4.3. Czym są testy akceptacyjne?
- 4.3.1. Zautomatyzowane testy akceptacyjne
- 4.3.2. Więcej niż wzrost wydajności
- 4.3.3. Testy ręczne
- 4.3.4. A co z klientem?
- 4.3.5. Testy akceptacyjne a testy jednostkowe
- 4.3.6. Środowiska testowe
- 4.4. Testy akceptacyjne oparte na interfejsie GUI
- 4.4.1. Problemy z testami z użyciem interfejsu GUI
- 4.4.2. Stosowanie abstrakcji
- 4.4.3. Automatyzacja z użyciem narzędzia Selenium
- 4.4.4. Interfejs API WebDriver
- 4.4.5. Testy bez użycia przeglądarki HtmlUnit
- 4.4.6. Interfejs API WebDriver dla Selenium
- 4.4.7. Środowisko IDE dla Selenium
- 4.4.8. Problemy ze zautomatyzowanymi testami interfejsu GUI
- 4.4.9. Wykonywanie testów z użyciem interfejsu GUI
- 4.4.10. Eksportowanie testów jako kodu
- 4.4.11. Ręczne modyfikowanie przypadków testowych
- 4.4.12. Dane testowe
- 4.4.13. Obiekty reprezentujące strony
- 4.5. Inne narzędzia do przeprowadzania testów z użyciem interfejsu GUI
- 4.5.1. PhantomJS
- 4.5.2. Windmill
- 4.6. Tekstowe testy akceptacyjne
- 4.6.1. Podejście BDD
- 4.6.2. Różne adaptery
- 4.7. Inne platformy
- 4.8. Strategie przeprowadzania testów akceptacyjnych
- 4.8.1. Właściwe narzędzie
- 4.8.2. Błyskawiczne informacje zwrotne
- 4.8.3. Pokrycie testami
- 4.9. Wnioski
- 4.1. Wprowadzenie
- Rozdział 5 Testy wydajności
- 5.1. Wprowadzenie
- 5.1.1. Testy wydajności przykład
- 5.2. Testy wydajności jak je przeprowadzać?
- 5.2.1. Cele testów wydajności
- 5.2.2. Środowiska i ilość danych
- 5.2.3. Testy szybkości tylko po zakończeniu implementowania kodu?
- 5.2.4. Testy wydajności = zarządzanie ryzykiem
- 5.2.5. Symulowanie działań użytkowników
- 5.2.6. Dokumentowanie wymogów związanych z szybkością
- 5.2.7. Sprzęt potrzebny w testach wydajności
- 5.2.8. Chmura i wirtualizacja
- 5.2.9. Minimalizowanie ryzyka dzięki ciągłemu testowaniu
- 5.2.10. Testy wydajności sensowne czy nie?
- 5.3. Implementowanie testów wydajności
- 5.4. Testy wydajności z użyciem narzędzia Gatling
- 5.4.1. Wersja demonstracyjna a praktyka
- 5.5. Narzędzia używane zamiast Gatlinga
- 5.5.1. Grinder
- 5.5.2. Apache JMeter
- 5.5.3. Tsung
- 5.5.4. Rozwiązania komercyjne
- 5.6. Wnioski
- 5.1. Wprowadzenie
- Rozdział 6 Testy eksploracyjne
- 6.1. Wprowadzenie
- 6.1.1. Testy eksploracyjne przykład
- 6.2. Po co stosować testy eksploracyjne?
- 6.2.1. Czasem testy ręczne i tak są lepsze
- 6.2.2. Testy z udziałem klientów
- 6.2.3. Testy ręczne wymagań niefunkcjonalnych
- 6.3. Jak zabrać się za testy eksploracyjne?
- 6.3.1. Zadanie określa testy
- 6.3.2. Zautomatyzowane środowisko
- 6.3.3. Przypadki pokazowe jako punkt wyjścia
- 6.3.4. Przykład aplikacja z obszaru handlu elektronicznego
- 6.3.5. Testy wersji beta
- 6.3.6. Testy oparte na sesji
- 6.4. Wnioski
- 6.1. Wprowadzenie
- Rozdział 7 Wdrażanie udostępnianie w środowisku produkcyjnym
- 7.1. Wprowadzenie
- 7.1.1. Wdrażanie przykład
- 7.2. Udostępnianie i wycofywanie
- 7.2.1. Korzyści
- 7.2.2. Wady
- 7.3. Zastępowanie nową wersją
- 7.3.1. Korzyści
- 7.3.2. Wady
- 7.4. Wdrażanie w modelu niebieskie-zielone
- 7.4.1. Korzyści
- 7.4.2. Wady
- 7.5. Udostępnianie kanarkowe
- 7.5.1. Korzyści
- 7.5.2. Wady
- 7.6. Ciągłe wdrażanie
- 7.6.1. Korzyści
- 7.6.2. Wady
- 7.7. Wirtualizacja
- 7.7.1. Hosty fizyczne
- 7.8. Poza aplikacje sieciowe
- 7.9. Wnioski
- 7.1. Wprowadzenie
- Rozdział 8 Eksploatacja
- 8.1. Wprowadzenie
- 8.1.1. Eksploatacja przykład
- 8.2. Trudności z eksploatacją oprogramowania
- 8.3. Pliki dziennika
- 8.3.1. Co należy rejestrować?
- 8.3.2. Narzędzia do przetwarzania plików dziennika
- ELK: Elasticsearch, Logstash i Kibana
- 8.3.3. Rejestrowanie danych w przykładowej aplikacji
- 8.4. Analizowanie dzienników przykładowej aplikacji
- 8.4.1. Analizowanie danych za pomocą Kibany
- 8.4.2. ELK skalowalność
- 8.5. Inne technologie obsługi dzienników
- 8.6. Zaawansowane techniki rejestrowania dzienników
- 8.6.1. Anonimizacja
- 8.6.2. Szybkość działania
- 8.6.3. Czas
- 8.6.4. Operacyjna baza danych
- 8.7. Monitorowanie
- 8.8. Pomiary z użyciem narzędzia Graphite
- 8.9. Pomiary w przykładowej aplikacji
- 8.9.1. Struktura przykładu
- 8.10. Inne rozwiązania z obszaru monitorowania
- 8.11. Inne wyzwania związane z eksploatacją aplikacji
- 8.11.1. Skrypty
- 8.11.2. Aplikacje w centrum danych klienta
- 8.12. Wnioski
- 8.1. Wprowadzenie
- Część III Zarządzanie, kwestie organizacyjne i architektura w obszarze ciągłego dostarczania
- Rozdział 9 Wprowadzanie ciągłego dostarczania w organizacji
- 9.1. Wprowadzenie
- 9.2. Ciągłe dostarczanie od początku projektu
- 9.3. Odwzorowywanie strumienia wartości
- 9.3.1. Odwzorowywanie strumienia wartości pozwala opisać sekwencję zdarzeń
- 9.3.2. Optymalizacje
- 9.4. Dodatkowe sposoby optymalizacji
- 9.4.1. Inwestycje wysokiej jakości
- 9.4.2. Koszty
- 9.4.3. Korzyści
- 9.4.4. Nie dodawaj kodu, gdy proces budowania kończy się niepowodzeniem!
- 9.4.5. Zatrzymywanie taśmy
- 9.4.6. Pięć pytań dlaczego
- 9.4.7. DevOps
- 9.5. Wnioski
- Rozdział 10 Ciągłe dostarczanie i DevOps
- 10.1. Wprowadzenie
- 10.2. Czym jest model DevOps?
- 10.2.1. Problemy
- 10.2.2. Perspektywa klienta
- 10.2.3. Pionierska firma Amazon
- 10.2.4. DevOps
- 10.3. Ciągłe dostarczanie i DevOps
- 10.3.1. DevOps więcej niż ciągłe dostarczanie
- 10.3.2. Pełna odpowiedzialność i samoorganizowanie się
- 10.3.3. Decyzje z obszaru technologii
- 10.3.4. Mniej scentralizowanej kontroli
- 10.3.5. Pluralizm w obszarze technologii
- 10.3.6. Wymiana między zespołami
- 10.3.7. Architektura
- 10.4. Ciągłe dostarczanie bez modelu DevOps?
- 10.4.1. Końcowa część potoku ciągłego dostarczania
- 10.5. Wnioski
- Rozdział 11 Ciągłe dostarczanie, DevOps i architektura oprogramowania
- 11.1. Wprowadzenie
- 11.2. Architektura oprogramowania
- 11.2.1. Po co tworzyć architekturę oprogramowania?
- 11.3. Optymalizowanie architektury pod kątem ciągłego dostarczania
- 11.3.1. Mniejsze jednostki wdrażania
- 11.4. Interfejsy
- 11.4.1. Prawo Postela lub zasada odporności
- 11.4.2. Projektowanie pod kątem niepowodzeń
- 11.4.3. Stan
- 11.5. Bazy danych
- 11.5.1. Zapewnianie stabilności baz danych
- 11.5.2. Baza danych = komponent
- 11.5.3. Widoki i procedury składowane
- 11.5.4. Baza danych dla komponentu
- 11.5.5. Bazy typu NoSQL
- 11.6. Mikrousługi
- 11.6.1. Mikrousługi i ciągłe dostarczanie
- 11.6.2. Wprowadzanie ciągłego dostarczania z użyciem mikrousług
- 11.6.3. Mikrousługi wymagają ciągłego dostarczania
- 11.6.4. Struktura organizacyjna
- 11.7. Radzenie sobie z nowymi funkcjami
- 11.7.1. Odgałęzienia kodu funkcji
- 11.7.2. Przełączniki funkcji
- 11.7.3. Korzyści
- 11.7.4. Przykłady zastosowań przełączników funkcji
- 11.7.5. Wady
- 11.8. Wnioski
- Rozdział 12 Wnioski jakie korzyści wynikają z ciągłego dostarczania?
Kategoria: | Zarządzanie i marketing |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-3785-5 |
Rozmiar pliku: | 5,5 MB |