Why You Should Read This Book
About the Author
- Introduction
Agile
Scrum
- Scrum and Continuous Integration
- Deployed vs Released
- Scrum and Continuous Delivery
Extreme Programming and Continuous Delivery
- Automated Tests
- Continuous Integration
Feature Branch
Continuous Delivery
Continuous Delivery Pipeline
Continuous Delivery vs Continuous Deployment
Canary Release
A/B Tests
Feature Flags
- Notepad App: Automated Tests, Maven and Flyway
Pre-Requisites
The Notepad Application
- The Note Model
- The Note Controller
Integration Tests
- NoteServiceTest.java
- NoteControllerTest.java
Acceptance Tests
- Page Object: NewNotePage.java
- CreateNoteTest.java
- AcceptanceTestsConfiguration.java
- Distributed Acceptance Tests with Selenium-Grid
Smoke Tests
Performance Tests
- Gatling
- HomeSimulation.scala
Apache Maven
- Maven Snapshot vs Release
- The Default Lifecycle and its Phases
- Maven Repositories
- Repository Manager
- Maven Plugins: Surefire and Failsafe
- Maven Profile
- Running Unit Tests
- Running Integration Tests
- Running Acceptance Tests
- Running Smoke Tests
- Running Performance Tests
- Publish Artifacts to Artifactory with Maven
- Publish a Snapshot to Artifactory
- Publish a Release to Artifactory
- The release:prepare Goal
- The release:perform Goal
Introduction to Docker
Difference Between Container and Image
Docker Hub
- Create your Account
- Official Docker Repositories
- Image Tags
- Pulling Images From a Different Docker Registry
- Non-Official Docker Images
- Create a Repository, an Image and Push it to Docker Hub
Running Containers on Docker
- Running Containers as Daemons
- Container Clean Up
- Naming Containers
- Exposing Ports
- Persistent Data with Volumes
- Environment Variables
Docker Networking
- Create a Bridge Network
- Container Static IP Address
- Linking Containers
Most Used Docker Commands
- Images
- Containers
- Misc
Building Docker Images
- Dockerfile
- FROM
- ENV
- RUN
- WORKDIR
- COPY
- ADD
- EXPOSE
- ENTRYPOINT
- VOLUME
- USER
- Jenkins: Pipeline as Code and ChatOps
Jenkins Overview
Jenkins Concepts
- Job (or Project)
- Build
- Artifact
- Workspace
- Executor
- Plugin
- Node, Master, and Agent (or Slave)
ChatOps
- Create a Slack Workspace
- Integrate Slack with Jenkins
- Slack Notification Plugin
- Use Hubot to Interact with Jenkins
Jenkins Pipeline
- Declarative Pipeline vs Scripted Pipeline
- Scripted Pipeline
- Using Docker with Jenkins Pipelines
- Running Docker from Within the Jenkins Container
Scaling Jenkins with Slaves
- Kubernetes
Why Kubernetes?
Set up a Kubernetes Cluster using Vagrant
Hands-on Introduction to Kubernetes
Kubernetes Concepts
- Namespaces
- Pods
- Labels
- Replica Sets
- Services
- Service Discovery using DNS
- Service Discovery using Namespaces
- Volumes
- Handling External Configurations
- Config Maps
- Changing Logback Log Level at Runtime
- Secrets
- Using Secrets as Environment Variables
- Using Secrets as Files from a Pod
- Deployments
- Readiness Probes
- Liveness Probes
- Canary Release
Kubernetes Architecture
- Kubernetes Master Components
- Etcd
- API Server
- Controller Manager
- Scheduler
Kubernetes Node Components
- Service Proxy
- Kubelet
- cAdvisor
Kubernetes Add-ons
- Web UI (Dashboard)
- Monitoring Kubernetes with Heapster, InfluxDB and Grafana
- Web UI Overview
- DNS
- Hands-on Project: Continuous Delivery Pipeline
Configuration
- Kubernetes Cluster
- GitHub Repositories
- Docker Hub
- Artifactory
- MySQL
- Logback
- Jenkins
- Kubernetes Plugin
- Pipeline Project: notepad-testing
- Pipeline Project: notepad-acceptance-test
- Pipeline Project: notepad-continuous-integration
- Pipeline Project: notepad-release
- Pipeline Project: notepad-staging
- Pipeline Project: notepad-performance-test
- Pipeline Project: notepad-production
- Pipeline Project: notepad-canary
- Pipeline Project: notepad-canary-scale-replicas
Usage
- New User Story Development Flow
- Preparation: Deploying Version 1.0.0
- Creating the Pull Request
- Testing Branch add-note-subtitle
- Generating Release Version 1.1.0
- Deploying Release Version 1.1.0 to Staging
- Deploying Release Version 1.1.0 to Production using Canary Release
Code
- Testing Branch add-note-subtitle
- notepad-testing
- notepad-acceptance-test
- Generating Release Version 1.1.0
- notepad-continuous-integration
- notepad-release
- Deploying Release Version 1.1.0 to Staging
- notepad-staging
- notepad-performance-test
- Deploying Release Version 1.1.0 to Production using Canary Release
- notepad-canary
- notepad-canary-scale-replicas
- notepad-production
- Appendices
Notepad application.yml
Notepad pom.xml