 In this demo, we're going to look at how we can deploy and use Jenkins Blue Ocean, the new user experience on Jenkins for interacting with pipelines, on OpenChiff using the certified image that comes with OpenShift for Jenkins. I have a microservice which is called cart deployed in my project. It's a Spring Boot application that provides shopping cart functionality through REST APIs. So what we want to do is to customize that certified Jenkins image and install the Blue Ocean plugin on that. We can do that using Source2Image mechanism on OpenShift for Jenkins. In order to do that, all we need to do is a Git repository that has plugins.txt in it with a list of plugins that we want to install. And I've created that already on GitHub under my account, Jenkins Blue Ocean. See, it's pretty much empty, it has only one plugin's text, and that includes the name of the plugin that I want to deploy. All right, let's create a build in OpenShift and use that. Just to give you an idea of how I find the images in OpenShift, I can search for Jenkins, see what's available. Okay, I've got a couple of templates and image streams that are available for me with different versions. I want to use this Jenkins image stream with version 2 as my builder image, as to why builder image. And refer to my Git repository so you would install those plugins and build a new image that has that plugin pre-installed for me. But I've created a new build config for me and an image stream where it will store the resulting Jenkins image, customize the Jenkins image on there. If I go to OpenShift under builds, you can see that the new build is created for me and it's running at the moment. Click on the logs and see exactly what's happening in the file. Down on the set of plugins and then builds the image and now it's pushing it back to the registry. Okay, build is complete. Now we can deploy this image, the customizer maybe just built, using the default templates that exist in OpenShift. There are two templates available, one that has persistent storage. So if I restart my container, Jenkins file is going to still be there and I have another one that is ephemeral, so while the data disappears. I'm going to use the ephemeral one and customize with Jenkins image to be deployed with this plugin. I'm going to increase the memory limit for this container. I'm going to change the Jenkins image stream tag to the image that we just built and it's in the current namespace. It's not in the OpenShift namespace. Great. It immediately deploys Jenkins instance based on the image that we just built. Jenkins is up and running. Let's give it a try. The image that comes with OpenShift and the one that we have based our customization on integrates into the author in OpenShift so I can log in in Jenkins using my OpenShift credential. Here is Jenkins. This is the traditional UI that Jenkins have, but if you notice in the upper bar, it has an open blue ocean button to click on that. And here we are. We are in the Jenkins blue ocean UI, the new UI for building pipelines. Let's now create an OpenShift pipeline that builds and deploys our cart service using OpenShift pipeline and see how that integrates into blue ocean. In the GitHub repo for cart service, I have created an OpenShift pipeline definition which is basically a built config that refers to the Git repository that contains Jenkins file for this pipeline. Inside our cart service repo, we have a Jenkins file. This is a standard Jenkins file using Jenkins pipeline DSL for creating complex pipelines. My OpenShift pipeline just refers to this Git repo and tells OpenShift to pull the Jenkins file and create it on Jenkins, run it on Jenkins but manage it in OpenShift and manage all your builds in a single place along with your S2I build and other type of builds that you have. Let's create this pipeline in our project. The pipeline is created. If I go to the OpenShift console, build pipelines, you can see that I have a pipeline running. You can start a build. It immediately starts a pipeline. It says also here that the pipeline definition is actually in this Git repo as a Jenkins file. Jenkins file from the Git repo and create that pipeline on Jenkins. Let's take a look to see what's happening in Blue Ocean. See that our pipeline is automatically created in Jenkins as well. It is recognized that one build is running. It has a log of all the stages that is being executed right now. Build stage finished. Run test in parallel. We're building a Docker image for cart service. We take the jar file that was produced in the build phase and then take the official OpenJDK image that comes with OpenShift and layer that jar file on top of JDK and save the result as a new Docker image, which is the cart service Docker image. This image we build only once and then promote that to various environments and deploy it into various containers like development and tests or UAT and so on. Right now we are deploying this image into the container that we had in our project. It first deploys the container and then since we want to run a couple of tests after deployment, it waits and verifies till the container has bootstrapped and the Spring Boot application has started coming up. Deployment finishes and the system tests are run also successfully.