Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu - Helion
Tytuł oryginału: Continuous Delivery in Java: Essential Tools and Best Practices for Deploying Code to Production
TÅ‚umaczenie: Krzysztof BÄ…bol, Andrzej Watrak, Lech Lachowski
ISBN: 978-83-283-5633-7
stron: 400, Format: 168x237, okładka: miękka
Data wydania: 2019-10-11
Księgarnia: Helion
Cena książki: 69,00 zł
W ciÄ…gu ostatnich lat radykalnie zmieniÅ‚y siÄ™ wymagania i oczekiwania biznesowe wobec oprogramowania. Kluczowymi wartoÅ›ciami sÄ… innowacyjność, szybkość i czas wejÅ›cia na rynek. Do speÅ‚nienia tych wymagaÅ„ konieczne okazaÅ‚y siÄ™ nowe architektury i modele tworzenia kodu. Metodyka ciÄ…gÅ‚ego dostarczania, zwanego też CD, polega na tworzeniu w krótkich cyklach wartoÅ›ciowych i solidnych produktów. FunkcjonalnoÅ›ci sÄ… dodawane w maÅ‚ych krokach, a oprogramowanie można wydawać niezawodnie w dowolnej chwili. To sprawia, że można też szybko otrzymywać informacje zwrotne. Jednak taki sposób pracy wymaga odpowiednich ram organizacyjnych, a zespóÅ‚ projektowy musi przyswoić nieco inny od tradycyjnego styl pracy.
Ta książka jest praktycznym przewodnikiem, dziÄ™ki któremu programiÅ›ci Javy opanujÄ… techniki potrzebne do pomyÅ›lnego zastosowania metody ciÄ…gÅ‚ego dostarczania. Opisano tu najlepsze zasady budowy architektury oprogramowania, automatycznej kontroli jakoÅ›ci, pakowania aplikacji i wdrażania ich w różnych Å›rodowiskach produkcyjnych. SzczególnÄ… uwagÄ™ poÅ›wiÄ™cono testowaniu oprogramowania: przedstawiono caÅ‚Ä… gamÄ™ metodyk testowania, opisano ich zastosowanie i znaczenie w cyklu życia aplikacji. Ciekawym elementem książki sÄ… informacje o zÅ‚ych praktykach i antywzorcach wraz ze wskazówkami dotyczÄ…cymi rozwiÄ…zywania tego rodzaju problemów.
W tej książce między innymi:
- solidne podstawy ciągłego dostarczania oprogramowania
- migracja do ciągłego dostarczania oprogramowania
- narzędzia: Jenkins, PMD i FindSecBugs
- zasady testowania funkcjonalności i jakości oprogramowania
- techniki obserwacji aplikacji w środowisku produkcyjnym
Java i CD: tak zdobędziesz prawdziwą przewagę!
Osoby które kupowały "Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu", wybierały także:
- Docker. Kurs video. Poziom drugi. Sieci, wolumeny i ustawienia daemona 69,00 zł, (20,70 zł -70%)
- DevOps w praktyce. Kurs video. Jenkins, Ansible, Terraform i Docker 199,00 zł, (69,65 zł -65%)
- Docker. Kurs video. Podstawy konteneryzacji 125,42 zł, (45,15 zł -64%)
- Docker. Kurs video. Optymalizacja konteneryzacji 125,42 zł, (45,15 zł -64%)
- Docker. Kurs video. Zostań administratorem systemów IT 119,00 zł, (53,55 zł -55%)
Spis treści
Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu -- spis treści
Słowa wstępne 13
Wstęp 17
1. Ciągłe dostarczanie? Dlaczego? Czym jest? 21
- Ogólny zarys 21
- Dlaczego? Bo daje możliwości programistom 22
- Szybka informacja zwrotna pozwala ograniczyć zmiany kontekstu 22
- Automatyczne, powtarzalne i niezawodne wydania 22
- Uściślenie definicji ukończenia 23
- Czym jest? Badamy typowy potok budowy 24
- Podstawowe etapy potoku budowy 24
- WpÅ‚yw technologii kontenerów 28
- Zmiany we wspóÅ‚czesnych architekturach 29
- Podsumowanie 29
2. Ewolucja programowania w języku Java 31
- Wymagania wspóÅ‚czesnych aplikacji Java 31
- Potrzeba szybkości i stabilności biznesowej 32
- Rozwój ekonomii interfejsów API 32
- Szanse i koszty chmury 33
- Przywrócenie modularnoÅ›ci: wykorzystanie niewielkich usÅ‚ug 33
- Wpływ na ciągłe dostarczanie 34
- Ewolucja platform wdrożeniowych w języku Java 35
- Archiwa WAR i EAR: era dominacji serwerów aplikacji 35
- Wykonywalne pliki JAR z zależnoÅ›ciami: powstanie metodologii dwunastu aspektów 36
- Obrazy kontenerów: ulepszenie przenoÅ›noÅ›ci (i zwiÄ™kszenie zÅ‚ożonoÅ›ci) 37
- Funkcja jako usługa: pojawienie się przetwarzania "bezserwerowego" 37
- Wpływ platform na ciągłe dostarczanie 38
- Metodyki DevOps, SRE oraz Release Engineering 39
- Rozwój i utrzymanie 39
- Site Reliability Engineering 40
- Inżynieria wydawnicza oprogramowania 42
- WspóÅ‚odpowiedzialność, metryki i wglÄ…d 43
- Podsumowanie 44
3. Projektowanie architektury pod kątem ciągłego dostarczania 45
- Fundamenty dobrej architektury 45
- Luźne sprzężenie 45
- Wysoka spójność 47
- Sprzężenie, spójność i ciÄ…gÅ‚e dostarczanie 47
- Architektura nakierowana na elastyczność biznesową 49
- ZÅ‚a architektura ogranicza dynamikÄ™ biznesowÄ… 49
- Złożoność i koszt zmian 50
- Najlepsze rozwiÄ…zania dla aplikacji zorientowanych na API 50
- Tworzenie interfejsów API metodÄ… od zewnÄ…trz do wewnÄ…trz 51
- Dobre interfejsy API pomagają w ciągłym testowaniu i dostarczaniu 51
- Platformy wdrażania a architektura 52
- Projektowanie aplikacji natywnych dla chmury wedÅ‚ug metodologii 12 aspektów 52
- Doskonalenie wyczucia mechaniki 55
- Projektowanie i ciągłe testowanie pod kątem awarii 56
- Podążanie w kierunku niewielkich usług 57
- Wyzwania w dostarczaniu aplikacji monolitycznych 57
- Mikrousługi: architektura zorientowana na usługi spotyka się z projektowaniem dziedzinowym 58
- Funkcje, architektura Lambda i nanousługi 59
- Architektura: "wszystko to, co trudno zmienić" 60
- Podsumowanie 60
4. Platformy wdrożeniowe, infrastruktura i ciągłe dostarczanie aplikacji Java 63
- Funkcje zapewniane przez platformÄ™ 63
- Niezbędne procesy programistyczne 64
- Platformy oparte o tradycyjnÄ… infrastrukturÄ™ 65
- Komponenty tradycyjnej platformy 65
- Wyzwania platform opartych o tradycyjnÄ… infrastrukturÄ™ 66
- Korzyści z bycia tradycyjnym 66
- Ciągła integracja i dostarczanie na platformach opartych o tradycyjną infrastrukturę 67
- Platforma chmury (IaaS) 67
- ZaglÄ…damy w chmurÄ™ 68
- Wyzwania chmury 69
- Korzyści z chmury 70
- Ciągłe dostarczanie w chmurze 71
- Platforma jako usługa 72
- Zaglądamy w usługę PaaS 72
- Wyzwania platformy PaaS 73
- Korzyści z platformy PaaS 75
- Ciągła integracja i dostarczanie a model PaaS 75
- Kontenery (Docker) 75
- Komponenty platformy kontenerów 76
- Wyzwania technologii kontenerów 76
- KorzyÅ›ci z kontenerów 78
- CiÄ…gÅ‚e dostarczanie kontenerów 78
- Kubernetes 78
- Podstawowe koncepcje platformy Kubernetes 79
- Wyzwania platformy Kubernetes 80
- Korzyści z platformy Kubernetes 81
- Ciągłe dostarczanie na platformie Kubernetes 81
- Funkcja jako usługa (funkcje bezserwerowe) 81
- Koncepcje platformy FaaS 82
- Wyzwania platformy FaaS 83
- Korzyści z platformy FaaS 84
- Ciągła integracja i dostarczanie a model FaaS 84
- Praca z infrastrukturÄ… jako kodem 85
- Podsumowanie 86
5. Budowanie aplikacji w języku Java 87
- Podział procesu budowania 87
- Automatyzacja budowania 88
- Zależności budowania 89
- Zależności zewnętrzne 92
- Projekty wielomodułowe 93
- Wiele repozytoriów (czy jedno)? 93
- Wtyczki 94
- Wydawanie i publikacja artefaktów 95
- Przegląd narzędzi do budowania kodu Java 95
- Ant 95
- Maven 98
- Gradle 102
- Bazel, Pants i Buck 105
- Inne narzędzia do budowania oparte o JVM: SBT i Leiningen 107
- Make 107
- Wybór narzÄ™dzia do budowania 108
- Podsumowanie 109
6. Dodatkowe narzędzia i umiejętności wykorzystywane do budowania aplikacji 111
- Polecenia Linuksa, powłoki Bash i podstawowego interfejsu wiersza poleceń 111
- Użytkownicy, uprawnienia i grupy 112
- Praca z systemem plików 115
- PrzeglÄ…danie i edycja tekstu 117
- Wszystko razem: przekierowania, potoki i filtry 118
- Wyszukiwanie tekstu i manipulowanie nim: grep, awk i sed 119
- Narzędzia diagnostyczne: top, ps, netstat i iostat 120
- Wywołania HTTP i manipulacja danymi JSON 121
- Narzędzie curl 121
- Narzędzie HTTPie 124
- Narzędzie jq 127
- Podstawy pisania skryptów 128
- Narzędzie xargs 128
- Potoki i filtry 128
- Pętle 129
- Warunki 129
- Podsumowanie 130
7. Pakowanie aplikacji do wdrożenia 131
- Budowanie archiwum JAR krok po kroku 131
- Budowanie wykonywalnego fat JAR (uber JAR) 135
- Wtyczka Maven Shade 135
- Budowanie plików uber JAR przy użyciu projektu Spring Boot 138
- Skinny JAR - gdy zdecydujesz siÄ™ nie budować plików uber JAR 139
- Budowanie plików WAR 140
- Pakowanie dla chmury 141
- Gotowanie konfiguracji: wypiekanie lub smażenie maszyn 142
- Budowanie pakietów RPM i DEB systemu operacyjnego 142
- Dodatkowe narzÄ™dzia kompilowania pakietów systemu operacyjnego (z obsÅ‚ugÄ… systemu Windows) 145
- Tworzenie obrazów maszyn dla wielu chmur za pomocÄ… programu Packer 147
- Dodatkowe narzÄ™dzia do tworzenia obrazów maszyn 149
- Budowanie kontenerów 150
- Tworzenie obrazów kontenerów za pomocÄ… narzÄ™dzia Docker 150
- Fabrykowanie obrazów Docker za pomocÄ… fabric8 151
- Pakowanie aplikacji Java FaaS 153
- Podsumowanie 155
8. Praca w lokalnym odpowiedniku środowiska produkcyjnego 157
- Wyzwania zwiÄ…zane z lokalnym tworzeniem oprogramowania 157
- Imitacje, atrapy i wirtualizacja usług 158
- Wzorzec 1.: profile, imitacje i atrapy 158
- Imitowanie usług za pomocą biblioteki Mockito 159
- Wzorzec 2.: wirtualizacja usług i symulacja interfejsu API 161
- Wirtualizacja usług za pomocą narzędzia Hoverfly 162
- Maszyny wirtualne oraz narzędzia Vagrant i Packer 165
- Instalacja narzędzia Vagrant 166
- Utworzenie pliku Vagrantfile 166
- Wzorzec 3.: pudełkowe środowisko produkcyjne 168
- Kontenery: Kubernetes, minikube i Telepresence 169
- Przykładowa aplikacja Docker Java Shop 169
- Tworzenie aplikacji Java i obrazów kontenerów 170
- Wdrożenie kontenera na platformie Kubernetes 172
- Prosty test usługi 174
- Utworzenie pozostałych usług 174
- Wdrożenie całej usługi Java na platformie Kubernetes 174
- Kontrola wdrożonej aplikacji 175
- Telepresence: praca zdalna i lokalna 176
- Wzorzec 4.: dzierżawa środowiska 178
- Funkcja jako usługa: AWS Lambda i SAM Local 179
- Instalacja narzędzia SAM Local 179
- Tworzenie funkcji AWS Lambda 179
- Testowanie obsługi zdarzeń za pomocą funkcji AWS Lambda 182
- Testowanie funkcji za pomocą narzędzia SAM Local 185
- FaaS: usługa Azure Functions i edytor Visual Studio Code 186
- Instalacja najważniejszych komponentów Azure Functions 186
- Lokalne kompilowanie i testowanie funkcji 189
- Testowanie lokalnych i zewnętrznych funkcji za pomocą edytora Visual Studio Code 191
- Podsumowanie 192
9. Ciągła integracja: pierwsze kroki w tworzeniu procesu kompilacji kodu 193
- Co to jest ciągła integracja oprogramowania? 193
- Implementacja ciągłej integracji oprogramowania 194
- Centralny i rozproszony system kontroli wersji 194
- Przewodnik po systemie Git 196
- Najważniejsze polecenia systemu Git 196
- Hub: podstawowe narzędzie w systemach Git i GitHub 198
- Efektywne korzystanie z systemu DVCS 200
- Programowanie pniowe 200
- Odgałęzienia funkcjonalne 201
- Gitflow 201
- Nie ma recepty na wszystko, czyli jak wybrać odpowiednią strategię odgałęziania 202
- PrzeglÄ…danie kodu 204
- Cele przeglÄ…dania kodu 205
- Automatyzacja przeglÄ…du kodu: analizatory PMD, Checkstyle i FindBugs 207
- PrzeglÄ…danie wniosków o zmiany 210
- Automatyzacja kompilacji 211
- Jenkins 212
- Zaangażowanie zespołu 213
- Regularne konsolidowanie kodu 214
- "Zatrzymać produkcję!", czyli obsługa nieudanych kompilacji 214
- Nie ignoruj testów 214
- Kompilacja musi być szybka 215
- Ciągła integracja platformy (infrastruktura jako kod) 215
- Podsumowanie 216
10. Proces wdrażania i wydawania oprogramowania 217
- Wprowadzenie do aplikacji Extended Java Shop 217
- Rozdzielenie wdrożenia i wydania aplikacji 220
- Wdrażanie aplikacji 220
- Utworzenie obrazu kontenera 221
- Mechanizm wdrażania 224
- Wszystko zaczyna się (i kończy) na kontroli stanu 233
- Strategie wdrożeniowe 237
- Praca z niezarzÄ…dzanymi klastrami 246
- Modyfikacje baz danych 249
- Wydawanie funkcjonalności 252
- Flagi funkcjonalności 253
- Wersjonowanie semantyczne 255
- Kompatybilność wsteczna i wersje interfejsu API 257
- Wielofazowe aktualizacje 261
- ZarzÄ…dzanie konfiguracjÄ… i poufnymi danymi 262
- "Zaprasowana" konfiguracja 263
- Zewnętrzna konfiguracja 264
- Przetwarzanie poufnych danych 265
- Podsumowanie 266
11. Testy funkcjonalne: sprawdzenie poprawności i akceptacja oprogramowania 267
- Po co testować oprogramowanie? 267
- Co testować? Wprowadzenie do kwadrantów zwinnego testowania 267
- Ciągłe testowanie oprogramowania 269
- Utworzenie odpowiedniej pętli zwrotnej 270
- Å»óÅ‚wie sÄ… wszÄ™dzie, aż po sam koniec 270
- Transakcje syntetyczne 272
- Testy kompleksowe 272
- Testy akceptacyjne 274
- Programowanie zorientowane na działanie 275
- Imitowanie i wirtualizowanie zewnętrznych usług 278
- Wszystko razem 278
- Testy kontraktów klienckich 279
- Kontrakty REST API 280
- Kontrakty komunikatów 283
- Testy komponentów 285
- Wbudowane magazyny danych 285
- Kolejki komunikatów umieszczane w pamiÄ™ci 286
- Dublerzy testowi 287
- Tworzenie wewnÄ™trznych zasobów lub interfejsów 288
- Testy wewnÄ…trz- i zewnÄ…trzprocesowe 289
- Testy integracyjne 291
- Weryfikowanie zewnętrznych interakcji 291
- Testy odporności na błędy 292
- Testy jednostkowe 293
- Towarzyskie testy jednostkowe 294
- Samotne testy jednostkowe 295
- Niestabilne testy 296
- Dane 296
- Tymczasowo niedostępne zasoby 296
- Niedeterministyczne zdarzenia 297
- Gdy nic nie można zrobić 297
- Testy "do wewnÄ…trz" i "na zewnÄ…trz" 298
- Testy "do wewnÄ…trz" 298
- Testy "na zewnÄ…trz" 299
- Zebranie wszystkiego w jeden proces 301
- Jak dużo testów trzeba wykonać? 301
- Podsumowanie 303
12. Testy jakościowe systemu: weryfikacja wymagań niefunkcjonalnych 305
- Po co testować wymagania niefunkcjonalne? 305
- Jakość kodu 306
- Jakość architektury 306
- ArchUnit: testy jednostkowe architektury 307
- Wyliczanie wskaźników jakoÅ›ciowych projektu za pomocÄ… biblioteki JDepend 308
- Testy wydajnościowe i obciążeniowe 310
- Testowanie wydajności przy użyciu Apache Benchmark 311
- Testy obciążeniowe z użyciem narzędzia Gatling 312
- Bezpieczeństwo, podatności i zagrożenia 317
- Weryfikacja bezpieczeństwa na poziomie kodu 318
- Weryfikacja zależności 322
- Luki w bezpieczeństwie platform wdrożeniowych 325
- Kolejny krok: modelowanie zagrożeń 329
- Testowy chaos 332
- Wywoływanie chaosu w środowisku produkcyjnym 333
- Wywoływanie chaosu w środowisku przedprodukcyjnym 334
- Jak dużo testów wymagaÅ„ niefunkcjonalnych trzeba wykonać? 335
- Podsumowanie 336
13. Obserwowalność aplikacji: monitorowanie, logowanie i śledzenie 337
- Obserwowalność i ciągłe dostarczanie oprogramowania 337
- Po co obserwować aplikację? 338
- Obiekty obserwacji: aplikacja, sieć, serwer 338
- Metody obserwacji: monitorowanie, logowanie i śledzenie 340
- Alarmy 340
- Projektowanie obserwowalnych systemów 341
- Wskaźniki 342
- Rodzaje wskaźników 343
- Dropwizard Metrics 343
- Spring Boot Actuator 344
- Micrometer 345
- Dobre praktyki tworzenia wskaźników 346
- Logowanie 347
- Formaty logów 347
- SLF4J 348
- Log4j 2 349
- Dobre praktyki logowania 350
- Śledzenie zapytań 351
- Ślady, przęsła i bagaże 352
- Åšledzenie aplikacji Java: OpenZipkin, Spring Cloud Sleuth i OpenCensus 353
- Dobre praktyki Å›ledzenia systemów 353
- Åšledzenie wyjÄ…tków 354
- Airbrake 355
- Narzędzia do monitorowania systemu 356
- collectd 356
- rsyslog 356
- Sensu 357
- Zbieranie i zapisywanie danych 357
- Prometheus 358
- Elastic-Logstash-Kibana 358
- Wizualizacja danych 359
- Wizualizacja dla biznesu 359
- Wizualizacja dla administratorów 360
- Wizualizacja dla programistów 361
- Podsumowanie 362
14. Migracja do ciągłego dostarczania 365
- Czynniki ciągłego dostarczania 365
- Wybór projektu migracji 366
- Świadomość sytuacyjna 367
- Framework Cynefin i ciągłe dostarczanie 368
- Wszystkie modele sÄ… zÅ‚e, ale niektóre sÄ… przydatne 369
- Wstępne organizowanie ciągłego dostarczania 370
- Pomiar ciągłego dostarczania 371
- Zacznij od niewielkich rzeczy, eksperymentuj, ucz się, udostępniaj i powtarzaj 372
- Szersze wdrożenie: kierowanie wprowadzaniem zmian 374
- Dodatkowe porady i wskazówki 375
- ZÅ‚e praktyki i typowe antywzorce 375
- Brzydka architektura: naprawiać czy nie naprawiać 376
- Podsumowanie 379
15. Ciągłe dostarczanie i ciągłe doskonalenie 381
- Zacznij od punktu, w którym jesteÅ› 381
- Opieraj siÄ™ na solidnych podstawach technicznych 382
- CiÄ…gÅ‚e dostarczanie wartoÅ›ci (Twój najwyższy priorytet) 382
- ZwiÄ™kszenie wspóÅ‚odpowiedzialnoÅ›ci za oprogramowanie 383
- Promuj szybkÄ… informacjÄ™ zwrotnÄ… i eksperymentowanie 384
- Rozwijaj ciągłe dostarczanie w organizacji 385
- Ciągłe doskonalenie 385
- Podsumowanie 386
Skorowidz 389