To understand intricacies and inner workings of Jenkins X, we need to understand Kubernetes. But, you do not need to understand Kubernetes to use Jenkins X. That is one of the main contributions of the project. Jenkins X allows us to harness the power of Kubernetes without spending eternity learning the ever-growing list of the things it does. Jenkins X helps us by simplifying complex processes into concepts that can be adopted quickly and without spending months in trying to figure out "the right way to do stuff." It helps by removing and simplifying some of the problems caused by the overall complexity of Kubernetes and its ecosystem. If you are indeed a Kubernetes ninja, you will appreciate all the effort put into Jenkins X. If you're not, you will be able to jump right in and harness the power of Kubernetes without ripping your hair out of frustration caused by Kubernetes complexity.I'll skip telling you that Kubernetes is a container orchestrator, how it manages our deployments, and how it took over the world by the storm. You hopefully already know all that. Instead, I'll define Kubernetes as a platform to rule them all. Today, most software vendors are building their next generation of software to be Kubernetes-native or, at least, to work better inside it. A whole ecosystem is emerging and treating Kubernetes as a blank canvas. As a result, new tools are being added on a daily basis, and it is becoming evident that Kubernetes offers near-limitless possibilities. However, with that comes increased complexity. It is harder than ever to choose which tools to use. How are we going to develop our applications? How are we going to manage different environments? How are we going to package our applications? Which process are we going to apply for application lifecycles? And so on and so forth. Assembling a Kubernetes cluster with all the tools and processes takes time, and learning how to use what we assembled feels like a never-ending story. Jenkins X aims to remove those and quite other obstacles.Jenkins X is opinionated. It defines many aspects of the software development lifecycle, and it makes decisions for us. It tells us what to do and how. It is like a tour guide on your vacation that shows you where to go, what to look at, when to take a photo, and when it's time to take a break. At the same time, it is flexible and allows power users to tweak it to fit their own needs.The real power behind Jenkins X is the process, the selection of tools, and the glue that wraps everything into one cohesive unit that is easy to learn and use. We (people working in the software industry) tend to reinvent the wheel all the time. We spend countless hours trying to figure out how to develop our applications faster and how to have a local environment that is as close to production as possible. We dedicate time searching for tools that will allow us to package and deploy our applications more efficiently. We design the steps that form a continuous delivery pipeline. We write scripts that automate repetitive tasks. And yet, we cannot escape the feeling that we are likely reinventing things that were already done by others. Jenkins X is designed to help us with those decisions, and it helps us to pick the right tools for a job. It is a collection of industry's best practices. In some cases, Jenkins X is the one defining those practices, while in others it helps us adopting those made by others.If we are about to start working on a new project, Jenkins X will create the structure and the required files. If we need a Kubernetes cluster with all the tools selected, installed, and configured, Jenkins X will do that. If we need to create Git repositories, set webhooks, and create continuous delivery pipelines, all we need to do is execute a single `jx` command. The list of what Jenkins X does is vast, and it grows every day.
Author(s): Viktor Farcic
Series: The DevOps Toolkit Series
Edition: 1
Publisher: Packt Publishing
Year: 2019
Language: English
Commentary: True PDF
Pages: 440
City: Birmingham, UK
Tags: DevOps; Pipelines; Clusters; Continuous Deployment; Kubernetes; Jenkins; Git; Serverless Applications; Helm
Table of Contents
Preface
About the Author
Dedication
What Is Jenkins X?
Installing Prerequisites
Installing Jenkins X CLI
To Create A Cluster Or Not To Create A Cluster
Creating A Google Kubernetes Engine (GKE) Cluster With jx
Creating An Amazon Elastic Container Service for Kubernetes (EKS) Cluster With jx
Creating An Azure Kubernetes Service (AKS) Cluster With jx
Is Your Cluster Ready For Jenkins X?
Installing Jenkins X In An Existing Kubernetes Cluster
What Did We Get?
What Now?
Deleting GKE Cluster And Unused Resources
Deleting EKS Cluster And Related Resources
Deleting AKS Cluster And Related Resources
Uninstalling Jenkins X
Exploring Quickstart Projects
Creating A Kubernetes Cluster With Jenkins X
Creating A Quickstart Project
Exploring Quickstart Project Files
Retrieving Jenkins X Activities, Logs, Pipelines, Applications, And Environments
What Now?
Importing Existing Projects Into Jenkins X
Creating A Kubernetes Cluster With Jenkins X
Importing A Project
Fixing The Auto-Generated Helm Chart
Why Did We Do All That?
What Now?
Creating Custom Build Packs
Creating A Kubernetes Cluster With Jenkins X
Choosing What To Include In A Build Pack
Creating A Build Pack For Go Applications With MongoDB Datastore
Testing The New Build Pack
Giving Back To The Community
What Now?
Applying GitOps Principles
Ten Commandments Of GitOps Applied To Continuous Delivery
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Exploring Jenkins X Environments
Which Types Of Tests Should We Execute When Deploying To The Staging Environment?
Exploring And Adapting The Staging Environment
Understanding The Relation Between Application And Environment Pipelines
Controlling The Environments
Are We Already Following All The Commandments?
What Now?
Improving And Simplifying Software Development
Exploring The Requirements Of Efficient Development Environment
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Creating a Remote Development Environment
Working With The Code In The DevPod Using Browser-Based IDE
Synchronizing Code From A Laptop Into A DevPod
Integrating IDEs With Jenkins X
What Now?
Working With Pull Requests And Preview Environments
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Creating Pull Requests
Intermezzo
Merging a PR
Exploring Jenkins X Garbage Collection
What Now?
Promoting Releases To Production
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Promoting A Release To The Production Environment
What Now?
Versioning Releases
Semantic Versioning Explained
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Versioning Releases Through Tags
Controlling Release Versioning From Jenkins X Pipelines
Customizing Versioning Logic
Versioning With Maven, NodeJS, And Other Build Tools
What Now?
Going Serverless
Exploring Prow, Jenkins X Pipeline Operator, And Tekton
Implementing ChatOps
Creating A Kubernetes Cluster With Jenkins X
Exploring The Basic Pull Request Process Through ChatOps
Exploring Additional Slash Commands
How Do We Know Which Slash Commands Are Available?
What Now?
Using The Pipeline Extension Model
The Evolution Of Jenkins Jobs And How We Got To The YAML-Based jenkins-x.yml Format
Getting Rid Of Repetition
Creating A Kubernetes Cluster With Jenkins X
Exploring Build Pack Pipelines
Extending Build Pack Pipelines
Extending Environment Pipelines
What Now?
Extending Jenkins X Pipelines
What Are We Trying To Do?
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Naming Steps And Using Multi-Line Commands
Working With Environment Variables And Agents
Overriding Pipelines, Stages, And Steps And Implementing Loops
Pipelines Without Buildpacks
Exploring The Syntax Schema
What Now?
Using Jenkins X To Define And Run Serverless Deployments
What is Serverless Computing?
Serverless Deployments In Kubernetes
Which Types Of Applications Should Run As Serverless?
Why Do We Need Jenkins X To Be Serverless?
What Is Tekton And How Does It Fit Jenkins X?
Creating A Kubernetes Cluster With Jenkins X And Importing The Application
Installing Gloo and Knative
Creating A New Serverless Application Project
Using Serverless Deployments With Pull Requests
Limiting Serverless Deployments To Pull Requests
What Now?
Choosing The Right Deployment Strategy
What Do We Expect From Deployments?
Creating A Kubernetes Cluster With Jenkins X And Creating A Sample Application
Using Serverless Strategy With Gloo And Knative (GKE only)
Using Recreate Strategy With Standard Kubernetes Deployments
Using RollingUpdate Strategy With Standard Kubernetes Deployments
Evaluating Whether Blue-Green Deployments Are Useful
About The World We Lived In
A Short Introduction To Progressive Delivery
A Quick Introduction To Istio, Prometheus, And Flagger
Installing Istio, Prometheus, And Flagger
Creating Canary Resources With Flagger
Using Canary Strategy With Flager, Istio, And Prometheus
Rolling Back Canary Deployments
To Canary Or Not To Canary?
Which Deployment Strategy Should We Choose?
What Now?
Applying GitOps Principles To Jenkins X
Discussing The Cardinal Sin
Creating A Kubernetes Cluster (Without Jenkins X)
What Is Jenkins X Boot?
Installing Jenkins X Using GitOps Principles
Exploring The Changes Done By The Boot
Verifying Jenkins X Boot Installation
What Now?
Managing Third-Party Applications
Creating A Kubernetes Cluster With Jenkins X
Managing Application-Specific Dependencies
Managing Third-Party Applications Through Permanent Environments
Managing Third-Party Applications Running In The Development Environment
Managing Third-Party Applications As Jenkins X Apps
Using Any Helm Chart As A Jenkins X App
Which Method For Installing and Managing Third-Party Applications Should We Use?
What Now?
Now It's Your Turn
Contributions