دسترسی نامحدود
برای کاربرانی که ثبت نام کرده اند
برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید
در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید
برای کاربرانی که ثبت نام کرده اند
درصورت عدم همخوانی توضیحات با کتاب
از ساعت 7 صبح تا 10 شب
ویرایش: 1 نویسندگان: Abraham Marín-Pérez, Daniel Bryant سری: ISBN (شابک) : 1491986026 ناشر: O'Reilly Media, Inc. سال نشر: 2018 تعداد صفحات: 0 زبان: English فرمت فایل : EPUB (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) حجم فایل: 10 مگابایت
در صورت ایرانی بودن نویسنده امکان دانلود وجود ندارد و مبلغ عودت داده خواهد شد
در صورت تبدیل فایل کتاب Continuous Delivery in Java به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.
توجه داشته باشید کتاب تحویل مداوم در جاوا نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.
تحویل مستمر ارزش زیادی به کسب و کار و کل چرخه عمر تحویل نرم افزار می افزاید، اما اتخاذ این روش به معنای تسلط بر مهارت های جدید معمولاً خارج از منطقه راحتی توسعه دهنده است. در این کتاب عملی، دانیل برایانت و آبراهام مارین پرز راهنمایی هایی را ارائه می دهند تا به توسعه دهندگان با تجربه جاوا کمک کنند تا مهارت هایی مانند طراحی معماری، تضمین کیفیت خودکار و بسته بندی و استقرار برنامه بر روی پلتفرم های مختلف را کسب کنند. نه تنها یاد خواهید گرفت که چگونه یک خط لوله ساخت جامع برای ارائه مداوم نرم افزار موثر ایجاد کنید، بلکه همچنین خواهید دید که چگونه معماری برنامه های کاربردی جاوا و پلت فرم های استقرار بر نحوه ارائه سریع و ایمن نرم افزار جدید به محیط های تولیدی تأثیر گذاشته است. برای شروع یا تکمیل مهاجرت خود به تحویل مداوم مشاوره دریافت کنید معماری طراحی برای فعال کردن تحویل مداوم برنامه های جاوا. find-sec-bugs برای خودکار کردن بررسی کیفیت کد ایجاد یک خط لوله ساخت و نرم افزار طراحی جامع برای جداسازی فرآیندهای استقرار و انتشار بررسی اینکه چرا تست ویژگی عملکرد و کیفیت سیستم از توسعه تا تحویل حیاتی است یاد بگیرید چگونه به طور موثر برنامه ها را به صورت محلی بسازید و آزمایش کنید و مشاهده کنید. سیستم شما در حالی که در حال تولید است
Continuous delivery adds enormous value to the business and the entire software delivery lifecycle, but adopting this practice means mastering new skills typically outside of a developer's comfort zone. In this practical book, Daniel Bryant and Abraham Marín-Pérez provide guidance to help experienced Java developers master skills such as architectural design, automated quality assurance, and application packaging and deployment on a variety of platforms. Not only will you learn how to create a comprehensive build pipeline for continually delivering effective software, but you'll also explore how Java application architecture and deployment platforms have affected the way we rapidly and safely deliver new software to production environments. Get advice for beginning or completing your migration to continuous delivery Design architecture to enable the continuous delivery of Java applications Build application artifacts including fat JARs, virtual machine images, and operating system container (Docker) images Use continuous integration tooling like Jenkins, PMD, and find-sec-bugs to automate code quality checks Create a comprehensive build pipeline and design software to separate the deploy and release processes Explore why functional and system quality attribute testing is vital from development to delivery Learn how to effectively build and test applications locally and observe your system while it runs in production
Forewords Preface Why Did We Write This Book? Why You Should Read This Book What This Book Is Not Conventions Used in This Book Using Code Examples O’Reilly Safari How to Contact Us Acknowledgments 1. Continuous Delivery: Why and What Setting the Scene Enabling Developers: The Why Rapid Feedback Reduces Context Switching Automatic, Repeatable, and Reliable Releases Codifying the Definition of “Done” Exploring a Typical Build Pipeline: The What Core Build Pipeline Stages Impact of Container Technology Changes with Contemporary Architectures Summary 2. Evolution of Java Development Requirements of Modern Java Applications Need for Business Speed and Stability Rise of the API Economy Opportunities and Costs of the Cloud Modularity Redux: Embracing Small Services Impact on Continuous Delivery Evolution of Java Deployment Platforms WARs and EARs: The Era of Application Server Dominance Executable Fat JARs: Emergence of Twelve-Factor Apps Container Images: Increasing Portability (and Complexity) Function as a Service: The Emergence of “Serverless” Impact of Platforms on Continuous Delivery DevOps, SRE, and Release Engineering Development and Operations Site Reliability Engineering Release Engineering Shared Responsibility, Metrics, and Observability Summary 3. Designing Architecture for Continuous Delivery Fundamentals of Good Architecture Loose Coupling High Cohesion Coupling, Cohesion, and Continuous Delivery Architecture for Business Agility Bad Architecture Limits Business Velocity Complexity and Cost of Change Best Practices for API-Driven Applications Build APIs “Outside-In” Good APIs Assist Continuous Testing and Delivery Deployment Platforms and Architecture Designing Cloud-Native “Twelve-Factor” Applications Cultivating Mechanical Sympathy Design and Continually Test for Failure The Move Toward Small Services Challenges for Delivering Monolithic Applications Microservices: SOA Meets Domain-Driven Design Functions, Lambdas, and Nanoservices Architecture: “The Stuff That’s Hard to Change” Summary 4. Deployment Platforms, Infrastructure, and Continuous Delivery of Java Apps Functionality Provided by a Platform Essential Development Processes Traditional Infrastructure Platforms Traditional Platform Components Challenges with Traditional Infrastructure Platforms Benefits of Being Traditional CI/CD on Traditional Infrastructure Platforms Cloud (IaaS) Platform Looking Inside the Cloud Cloud Challenges Benefits of the Cloud Continuously Delivering into the Cloud Platform as a Service Peeking Inside a PaaS PaaS Challenges Benefits of PaaS CI/CD and PaaS Containers (Docker) Container Platform Components Container Challenges Container Benefits Continuously Delivering Containers Kubernetes Core Concepts of Kubernetes Kubernetes Challenges Benefits of Kubernetes Continuous Delivery on Kubernetes Function-as-a-Service/Serverless Functions FaaS Concepts Challenges of FaaS FaaS Benefits CI/CD and FaaS Working with Infrastructure as Code Summary 5. Building Java Applications Breaking Down the Build Process Automating the Build Build Dependencies External Dependencies Multimodule Projects Multiple Repositories (or a Monorepo)? Plugins Releasing and Publishing Artifacts Java Build Tooling Overview Ant Maven Gradle Bazel, Pants, and Buck Other JVM Build Tools: SBT and Leiningen Make Choosing a Build Tool Summary 6. Additional Build Tooling and Skills Linux, Bash, and Basic CLI Commands Users, Permissions, and Groups Working with the Filesystem Viewing and Editing Text Joining Everything Together: Redirects, Pipes, and Filters Searching and Manipulating Text: grep, awk, and sed Diagnostic Tooling: top, ps, netstat, and iostat HTTP Calls and JSON Manipulation curl HTTPie jq Basic Scripting xargs Pipes and Filters Loops Conditionals Summary 7. Packaging Applications for Deployment Building a JAR: Step-by-Step Building a Fat Executable “Uber” JAR Maven Shade Plugin Building Spring Boot Uber JARs Skinny JARs—Deciding Not to Build Fat JARs Building WAR Files Packaging for the Cloud Cooking Configuration: Baking or Frying Machines Building RPMs and DEBs OS Packages Additional OS Package Build Tools (with Windows Support) Creating Machine Images for Multiple Clouds with Packer Additional Tools for Creating Machine Images Building Containers Creating Container Images with Docker Fabricating Docker Images with fabric8 Packaging FaaS Java Applications Summary 8. Working Locally (Like It Was Production) Challenges with Local Development Mocking, Stubbing, and Service Virtualization Pattern #1: Profiles, Mocks, and Stubs Mocking with Mockito Pattern #2: Service Virtualization and API Simulation Virtualizing Services with Hoverfly VMs: Vagrant and Packer Installing Vagrant Creating a Vagrantfile Pattern #3: Production-in-a-Box Containers: Kubernetes, minikube, and Telepresence Introducing the “Docker Java Shop” Sample App Building Java Applications and Container Images Deploying into Kubernetes Simple Smoke Test Building the Remaining Applications Deploying the Entire Java Application in Kubernetes Viewing the Deployed Application Telepresence: Working Remotely, Locally Pattern #4: Environment Leasing FaaS: AWS Lamba and SAM Local Installing SAM Local AWS Lambda Scaffolding Testing AWS Lambda Event Handling Smoke Testing with SAM Local FaaS: Azure Functions and VS Code Installing Azure Function Core Tools Building and Testing Locally Testing Remotely, Locally Using VS Code Summary 9. Continuous Integration: The First Steps in Creating a Build Pipeline Why Continuous Integration? Implementing CI Centralized Versus Distributed Version-Control Systems Git Primer Core Git CLI Commands Hub: An Essential Tool for Git and GitHub Working Effectively with DVCS Trunk-based Development Feature Branching Gitflow No One-Size Fits All: How to Choose a Branching Strategy Code Reviews What to Look For Automation: PMD, Checkstyle, and FindBugs Reviewing Pull Requests Automating Builds Jenkins Getting Your Team Onboard Merge Code Regularly “Stop the Line!”: Managing Broken Builds Don’t @Ignore Tests Keep the Build Fast CI of the Platform (Infrastructure as Code) Summary 10. Deploying and Releasing from the Pipeline Introducing the Extended Java Shop Application Separating Deployment and Release Deploying Applications Creating a Container Image Deployment Mechanisms It All Starts (and Ends) with Health Checks Deployment Strategies Working with Unmanaged Clusters Changing Databases Releasing Functionality Feature Flags Semantic Versioning (semver) Backward Compatibility and Versions in APIs Multiple-Phase Upgrades Managing Configuration and Secrets “Baked-In” Configuration Externalized Configuration Handling Secrets Summary 11. Functional Testing: Correctness and Acceptance Why Test Software? What to Test? Introducing Agile Testing Quadrants Continuous Testing Building the Right Feedback Loop Turtles All the Way Down Synthetic Transactions End-to-End Testing Acceptance Testing Behavior-Driven Development Stubbing or Virtualizing Third-Party Services Bringing It All Together Consumer-Driven Contracts RESTful API Contracts Message Contracts Component Testing Embedded Data Stores In-Memory Message Queues Test Doubles Creating Internal Resources/Interfaces In-Process Versus Out-Of-Process Integration Testing Verifying External Interactions Testing Fault Tolerance Unit Testing Sociable Unit Testing Solitary Unit Testing Dealing with Flaky Tests Data Resource That Is Not Available Yet Nondeterministic Events If Nothing Else Works Testing Outside-In Versus Testing Inside-Out Outside-In Inside-Out Putting It All Together Within the Pipeline How Much Testing Is Enough? Summary 12. System-Quality Attributes Testing: Validating Nonfunctional Requirements Why Test Nonfunctional Requirements? Code Quality Architectural Quality ArchUnit: Unit-Testing Architecture Generate Design-Quality Metrics with JDepend Performance and Load Testing Basic Performance Testing with Apache Benchmark Load Testing with Gatling Security, Vulnerabilities, and Threats Code-Level Security Verification Dependency Verification Deployment Platform-Specific Security Issues Next Steps: Threat Modeling Chaos Testing Causing Chaos in Production (Bring in the Monkeys) Causing Chaos in Preproduction How Much NFR Testing Is Enough? Summary 13. Observability: Monitoring, Logging, and Tracing Observability and Continuous Delivery Why Observe? What to Observe: Application, Network, and Machine How to Observe: Monitoring, Logging, and Tracing Alerting Designing Systems for Observability Metrics Type of Metrics Dropwizard Metrics Spring Boot Actuator Micrometer Best Practices with Metrics Logging Forms of Logging SLF4J Log4j 2 Logging Best Practices Request Tracing Traces, Spans, and Baggage Java Tracing: OpenZipkin, Spring Sleuth, and OpenCensus Recommended Practices for Tracing Exception Tracking Airbrake System-Monitoring Tooling collectd rsyslog Sensu Collection and Storage Prometheus Elastic-Logstash-Kibana Visualization Visualization for Business Operational Visualization Visualization for Developers Summary 14. Migrating to Continuous Delivery Continuous Delivery Capabilities Picking Your Migration Project Situational Awareness The Cynefin Framework and Continuous Delivery All Models Are Wrong, Some Are Useful Bootstrapping Continuous Delivery Measuring Continuous Delivery Start Small, Experiment, Learn, Share, and Repeat Increase Adoption: Leading Change Additional Guidance and Tips Bad Practices and Common Antipatterns Ugly Architecture: To Fix, or Not to Fix Summary 15. Continuous Delivery and Continuous Improvement Start from Where You Are Build on Solid Technical Foundations Continuously Deliver Value (Your Highest Priority) Increase Shared Responsibility of Software Promote Fast Feedback and Experimentation Expand Continuous Delivery in an Organization Continuous Improvement Summary Index