 So my presentation is going to be about the custom distribution build service. So this project was basically thought out as a replacement for having to build all of the Jenkins war files using the custom, using the war by downloading the war and then beginning all of your work. So let me just introduce my mentors first. My Christian and Martin and Oleg was a technical advisor in the project helping out on all technical issues. So yeah, what's this project all about? So we tried to address major four features. One of them was having an out-of-the-box usable Jenkins distribution, a simple user interface. So for users to be able to configure the plugins right out of the box by making it very, very simple. So as you can see, it's supposed to be very user-friendly to use. Community-shared configurations. This was one of the most demanded features on the thread that originally conceived the project. There was a lot of demand for having configurations that are being widely used around the community. So be it AWS or be it a Kubernetes plugin, users wanted to have a community-shared configurations page where they could share, where they could reuse configurations that were developed by people around the world. And the last one was easy access. So sometimes there have been complaints that it's difficult to access the plugin, the update center. This service tries to circumvent that problem and tries to add easy access to be able to add your custom update center that you can download plugins for. You can view plugins from and so on. So that's major four features that we're targeting. Yeah, what was the current problem? I'll not spend too much time on this because I've already explained most of it. For many users, they download Jenkins first and after downloading, they select plugins and configure them. So this might take a lot of time and we try to reduce that time using the custom distribution build service. That contains all you need on a web application online and you can easily do it without in the comfort of your browser. Okay, what was the project motivation? So we work hard so you don't have to. So we do all of the heavy lifting and you just have to download the var and you can run it right out of the box with all of your plugins configured very, very easily. Okay, so I'll just run through the major features that were implemented. These are a collection over all of the three phases. So we started out with the bare bones, the package config generation. You need the package config generation. It's a YML file and this YML file is then used by the custom var packageer to package it into a var file. So you needed that. So we went ahead and you did that in the first phase. Then came the var generation sequentially after you had the package configuration, you could then generate the var. The third one was to ability to configure custom packages. So after that, we added the features to be able to not only generate custom packages, but also be able to edit them live on the editor and then you can make changes right out of the box. So if you say you downloaded a particular Jenkins version and not happy with it, you can go ahead and change the Jenkins version and it will regenerate the var file for you. The community configuration has requested one of the most requested features. So having community configurations where you can use Blue Ocean or maybe AWS Kubernetes and so on and so forth. The next one was the ability to download var. So up in the phase two, you only had the generation. We then supported downloads. So you could click a button and download the var file right out of the user interface. The ability to search and download community configurations. So after adding support for community configurations, we added the support to then search and download them. You also have, if I'm not mistaken, you can add your own repository URL. So if you are not comfortable with using the Jenkins community configuration URL, you are free to use your own URL. The ability to share community configurations, again, that's an extension of shared community configurations. You can yourself contribute to the immense repository that's there. There are a couple of repositories. There is one by even Rick, which I will demo later on in the project. He maintains something called as Jenkins formulas and they are a collection of ready usable Jenkins distributions and self hosting capability. This was one that we weren't quite sure about in the middle of the phase because we needed permissions to host it on Jenkins. So we decided to add this feature anyway. So it is now self hosted as well. I mean, it has the ability to be self hosted. So if you want, you can spin up by just two commands. You don't just need to have Docker on your system and you can with two commands, you have the entire service up and running in minutes. So yeah, that's another amazing feature that we have. Okay. Making the initial Jenkins setup simple. So I'll just walk you through the steps that you use for generating. I hope this is not, yeah, this is not objecting. So you select your favorite plugins that you need. You then customize the configuration. And after that, you just relax because after customizing the configuration, they have a lifting is then done by us because you just then need to generate the package. And if you want, you can download the package or you can proceed with generating the warfare. So the service will take care of generating the Jenkins.warf for you. You just need to download and run. Okay. Where is this app hosted? So the app is currently hosted on customized or Jenkins.io. I will be while I do my demo, I will be taking you out of the slides. So you can have a look at it later on with smoke. So you can also download. As I said in the previous slide, as I was going to take you forward, the Jenkins formulas is a repository that you would want to check out. It has prebuilt configurations for Jenkins like Blue Ocean and so on. You can definitely use them out of the box and you can put those URLs into the custom distribution self-hosted version if I told you want to run it self-hosted. Oh, time for some demos. Okay, let's go out. Yeah. So as you can see, this is the plugin page. We have all of the plugins that we pull in from the update center, the Jenkins update center, and over 1,700 plugins. One major challenge of this particular implementation was how this was taking too long to load, sometimes pulling in 1,700 plugins. So we have caching support for that now, fortunately. And yes, so the steps are, so I'm just going to be adding a few plugins. You can just choose them. If you want, you can even sort them out. So most installed, trending and so on, relevant. According to your liking. So if you want my trending, sorry. So yeah, I'll just select a couple of them. The next thing that you, after selecting your plugins, you do is you submit your plugin. And on submission, you'll get a model. And on this model, you can enter all of your details. So you have the Jenkins online meetup. You enter a Jenkins version. You enter the artifact ID. So if you, whatever you want to name it, suppose if you're developing one where it's a Jcast sort of package, you can rename it as per, so this is for demo purposes. Okay. Furthermore, if you wanted a Docker build, you can include a Docker tag. Currently, there are a few issues. There's a disclaimer. There are a few issues with the Docker building inside because this runs in a Docker container. And then we have a Docker and Docker. That's a bit of a disclaimer. So you can include the build tag though, because we wanted that feature to be supported. You click generate package. So yeah, as soon as you hit generate package configuration, the service generates a package for you. All of your plugins come right in as you selected previously. And after you select all of these things, you can then, you have two options. So you can either download the wire file or you can download the package or configuration. So if I just download the package or configuration, as you can see on the left of my screen in my cursor, you will have your YML downloaded. So you'll ask me what's the advantage of having a YML. So the Jenkins custom water package currently takes this file and generates a water package for you. So if you do not want to use the service and you want to use your custom water package, you can use that as well. Because this takes in, because the custom water package takes this as an input. So yeah, just before I demo the water file, I would like to come to the community configurations because that's where the minimal working configuration of Jenkins is hosted and we have a valid Jenkins version there. So yeah, so we have two versions. This, these two YMLs are currently hosted right here. So if you see, yeah, custom Jenkins distribution service community configuration. This repository will down the line be hosted by Jenkins on their repository page, on their GitHub organization, I'm so sorry, where you will then find all of the configurations. So whatever configurations you can see here, those are the same configurations you can see here. So that's what's essentially happening. As in when we expand these community configurations list, you can add, you will find more and more community configurations listed out here. So they will be named AWS Azure and so on, so on, Blue Ocean and so on. Okay, yeah, so after you have them all displayed in this page, you can definitely choose to change the version, sorry, the URL that you would like to point this community configuration to. So if you're not happy with custom distribution service community configuration, that's not a problem. You can enter your own URL for your, where your repository has been hosted for community configurations. Yeah, so if you click to view details, yeah, so you get to view details. You see one of the, one of the sample configurations that I had set up. So it generally loads the entire configuration and you can then click on download Wi-Fi. So I would like to show you. So yeah, when you click on Wi-Fi, what happens is the custom Wi-Packager in the background runs the entire generation of the Wi-Fi. So I'll just be waiting for a few seconds around. It takes around 25 seconds to bundle all of the plugins. So while we wait for that, the Wi-Packager built by Oleg, built and maintained by Oleg, is one of the heavy lifters of the custom distribution service and it relies on the custom Wi-Packager to package and bundle. One of the features that we plan to include here is the ability is for more robust errors. So currently, if something goes wrong, you might not get a very good error message on the screen and that's something that we will be trying to improve in the future. So yeah, as you can see, the Wi-Fi is being built. I think it should take a few more seconds. Yeah, there it is. So yeah, as soon as the Wi-Fi completes building it, it happens in a temporary folder. So as soon as you have the Wi-Fi, it returns it. So as you can see, there are almost, I've been generating Wi-Files for a long time, so there are 13 of them. But yeah, this is the Wi-Fi that you can just run with Jenkins, Jar, Jenkins, what that's the command. And then you can spin up the Jenkins Wi-Fi with all of the plugins pre-bundled. So whatever you have selected here, configuration is scored, CI, Matrix, Auth, so on, all of them will be just bundled in that one, right on the book. So you don't have to leave your browser. Yeah, that's, I think, that is it for all of the demonstration of all of the features. One thing I would like to show you is the repository. The repository is self-hosted. So you can use just Docker Compose, build and Docker Compose up and you'll have the service running up in seconds. Apart from that, if you do want to add certain configurations, we have the environment files supported. That is a pull request still in development, so it might come soon, where you can change your environment variables inside of environment files. So yes, that was one of the features that is coming. Last, I wanted to talk about how can you participate? So we have our GitHub distribution service, as the service posted on the repository. We also have a GitHub chat where you can ping in or send in your queries, feedback, questions, and so on. And we also have a project link. So the project link has been updated with all of the phases, all of the development that was done throughout all of the phases. We have also the demo links of the previous phases there. What's next? So I wanted to talk about what's next because the plugin has a lot of the service has a lot of potential. And there are a lot of features to come. I think three months, to be honest, was less to implement a plethora of features that we tried to put in, but yeah, there are still that need to go in. So if you don't mind, I can take you a bit back to the roadmap. And as you can see, there are a lot of issues here, but we're at the throat now. So one of the things, yeah, one of the things for the roadmap is some prototype for the JCAS creation. So Jenkins configuration is very popular among the community and we would like to support that as well. So if you see this page right here, you just have your bundles and stuff, but if you want to include something like a JCAS section, we would like to support that as well, where you just put in your JCAS, can you have your JCAS YML as a support? So you can definitely include that as well here. And then you will have not only your bundles, packages, and plugins, but you'll also have your JCAS YML supported. So you can just start your Jenkins work right out of the box with a few clicks. That is one of the most features for the roadmap, one most important one. Apart from that, we want to support running the service on Windows. That's a feature that might be coming way, way down the line. Another thing that we want to support is pull request creation. So currently, you can only view them. So what if I create a new configuration here and I want to create a new pull request or I want to share it with the community? That's a feature that we've been planning for the roadmap ahead, so that you can just create a pull request using maybe GitHub bots, like ci.jenkins.io has a GitHub application. Maybe we can leverage of that to create pull request inside repositories. That's one of the features for the roadmap. And another one was, yeah, I don't, this is unable to, that's not a roadmap. I'm sorry, I'm just taking over that for a minute. And Explore Synergy with Image Controller. So this is still under development and discussion. We would like to take a look at this later on. This basically deals with the Kubernetes operator and the sort of images that Red Hat has on their repository list and maybe we can support creation of images right out of the box so that you can not only now generate a war file, but you can also generate an image. So yeah, that's for the roadmap. And yeah, that's about it for my presentation, for my demo. Lastly, just before I finish, I would like to thank my mentors, Kristin and Martin. They have been super, super helpful throughout the entire GSOC phase. They've helped me in almost all of the, all of the holes that I've dug myself into. And Oleg as well on occasions, to help me with all of the technical stuff. Yeah, so I would like to thank them and I really, really appreciated for giving the time out during this COVID pandemic. It's not easy. But yeah, we've kind of managed it and I'm happy to show you that it's also been hosted on its own domain. So I've completely forgot about this. So it's also hosted on customize.jankins.io. However, there are bugs here. This is not fully functional as of now. There are, you might receive some four or four headers. But yeah, it is also hosted on customize.jankins.io. So if you want to play around, we need to still patch up a few things, but we do have an alpha version deployed on it. So yeah, I think the project has been really, really, really great. So yeah, that's it. I'm handing over the mic back to Oleg. Okay, Oleg. Okay, maybe Oleg is not, oh, he's back. No, I'm actually here. I was just trying to unblock myself. Yeah, and so thanks a lot for the demo. I'm great to see that it's working. Yeah, there is a lot of stuff here and there to complete. So yeah, probably the scope was too big, but yeah, it starts with so many stories. Many of them seem to be finished. But still, it's a great proof of concept. Custom Jenkins word packages as a service. Hopefully it can be expanded from there to support more and more user features. And yeah, I'm looking forward to see what will be user feedback there. So thanks for doing that. I think it's a quite important step for the Jenkins system. Yeah, I'd like to slide in for his work on creating this web app. And one of the things that I really like about it is I can use it on my local host. So if I'm working on configurations that cannot be shared with the world, I can run this entirely locally. So that was one of the features, I guess, which was important is the ability to run sort of behind a firewall. So if you don't have to use the hosted one, if you have some private configurations that you need to be working on, just wanted to enhance that capability or promote it. Right. And it's been great. Like it's been a great project. So like this summer has been very good and it's been really great to see the tool be built and to see like it kind of developing through different phases and see the UI and knowing it's essentially like two different applications running so later that to create like two different things and like doing a whole front end and a back end. So it's really interesting to see the tool come together and it's really amazing to see it hosted. And kind of it's all performed. So congrats. You did a great job this summer.