Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu

41.40

Description

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

Informatyka

liliana klimont, liczby po norwesku, mitologia nordycka symbole, obliczenie zasiłku chorobowego, o work opinie o pracodawcach, trw czestochowa, e-toll bilet jednorazowy gdzie kupić, przykładowy list, ile jest miast wojewódzkich w polsce, airtec, fresenius kabi praca, kurs monter rusztowań

yyyyy