 Hello everyone. I'm going to talk about the new source to image feature in OpenShift 3.2 that allows you to customize the official image that is shipped by OpenShift for adding your configuration, plugins, and other stuff to the Jenkins image. So how does it work? The source to image processing OpenShift is a mechanism that allows you to point at a source code of certain things, could be your application, in this case it's a configuration of Jenkins. It takes that configuration, it layers it on top of the Jenkins official image, downloads the Docker image from registry, layers those stuff on top, and creates a new image, container image containing the official image, your configuration and push that into the registry. We can use that as the base image of creating Jenkins instances on OpenShift. Why do we do that? Because we want the Jenkins image that we start with, we want to have all the plugins that are required in my team already configured in it, all the jobs that I need for different kinds of things, the credentials for connecting to things, and the configuration of the required Jenkins. I have every time that stand up Jenkins instance, I go reconfigure everything, I go manually add those kind of stuff. So it really simplifies customizing Jenkins image so that I can stand up new ones, pre-configure everything like follows the immutable infrastructure principle. On top of that, we're going to do one more thing that is also available in OpenShift 3.2. We're going to use Jenkins pods for running the slaves in Jenkins. You can run Jenkins in this sort of manner. Then you want to run many jobs, you want to have more instances of Jenkins available to just delegate the actual running job to those instances running job and get the result and show it in Jenkins master. In OpenShift 3.2, we can instantiate pods on demand, run the job and terminate them after the job is finished and show the result on Jenkins master. How would that work in this demo? We're going to have a job that looks at Git repository for an application, it's a Java application, it's a list of tests, expose the REST API for that. So Jenkins talks to OpenShift. It asks to create a new slave pod for Jenkins. Then it starts that job, it's a Maven job, builds the application and package it on that slave pod. It's going to pull down the Java, the Maven dependencies that it has from a Nexus that I have also running on OpenShift. And after the job is finished, it collects all the results, collects all the reports and removes that slave pod so that it saves resources for the next job. So let's switch to the demo and see some of this stuff in action. Okay, Jenkins is up and running, so far so good. Let's switch to Jenkins and look at our job. I need to login, the default password is password. You can customize that in the template provided. So we have the task field job already pre-configured as if you can see in the master in GitHub, I had already a task field configuration with conflict XML so that is laid already on top of this Jenkins image and it has pre-configured a job for us. If you look at it, it's cloning the task application from GitHub. It's a normal Java application, nothing complicated on that. Okay, so how am I going to say that this needs to run on those particular pods on OpenShift, the JDK8 pod, so we use restrict where this project can run and say this project can run on a pod that is labeled as JDK8. And the platform will recognize there are no nodes defined but there is one cloud node provider, OpenShift, that supports this type of label. I saved this. Let's run this side by side. All right, let's start this build and see what happens. So a new build is instantiated, it's queued, it's waiting to find an executor to find a node. Now it's going to talk to OpenShift as you see a new pod is instantiated, it brought up based on the JDK8 Jenkins slave that we built. Now the job has started running on that particular image that we created, it's normal build, it's going to clone the source code, it's going to run the build, takes a few seconds, run the Maven build package and after this is succeeded, it's going to remove that pod. If you start several of these jobs at the same time, you're going to have several of those pods standing up, right, to allow us to own parallel builds on separate environments, just creating them on demand and remove them as the job finishes. Okay, the job was finished, the pod you see disappear takes about 30 seconds, 40 seconds to build a job and it was a sunny, green build was successful. We can verify also through looking at the logs, there's a Maven build, all good, and build successful and success. So that's about it. Jenkins is trying to be able to allow us to customize the official Jenkins image and also at the same time using the Kubernetes plugin, allows you to on demand to create a slave pod on OpenShift and run the jobs on it and remove them when they are needed, not needed in the model. Thank you very much for listening.