 I also welcome to the Jenkins's the way online meetup. Today we have a presentation by our GSOC to some 20 students, Sliden Nines. So Sliden will present custom Jenkins distribution and build service. It's a project he's working on. Sliden, you can proceed with the presentation. Yeah, so I'm going to be sharing my screen. Let me know when it's possible. Yeah. Can you see the screen? Yes. So let's begin. So I'm a student for Google Summer of Code 21. And I'm going to be doing a presentation on the custom distribution service. As you can see, we have a wonderful mentor team of Kristin and Rick. And I'm taking an advisor. Yeah. So let's see what the current problem is. So for many users, they really download Jenkins first, then select some plugins, configure them. And it might take a lot of time, you know, setting up the entire configuration, downloading it, especially if you have any network problems. So this can be a better time consuming task. So it would be, I mean, we thought that we could solve this by getting a custom distribution service. So let me just shift over to the next slide. And you'll come to know more about it. So what the project is about. So the project is about creating out of the box usable Jenkins distribution with a very, very clean, simple user interface. A community-shared configuration. So that I mean, if the user creates a configuration that is very widely used in the community, for example, Jenkins on AWS, Jenkins on Kubernetes, something like that. Configuration can be easily shared. I'll just start on my point a little bit. Yeah. And also for easy access around the world. So sometimes, you know, while you're using your Jenkins instance, it would be possible that loading plugins might be a bit difficult for you. Since you might face some network issues or, you know, that proxy might be disabled in your network. So we plan to work around that problem with easy access, community-shared configurations, and a simple user interface and out of the box Jenkins distribution. So these are four of the major deliverables of this project. And yeah, we plan to implement it in the current GSOC. Yeah. So what is the project motivation? So the main project motivation is we work hard so that you don't have to. We plan to abstract most of the problems away from the user so that he doesn't have to, you know, download the entire Jenkins distribution and configure the plugins and then download the WAF file and then keep doing that again and again. So we have tried to do most of that work on our side so that what you have to do is just simply configure the, I mean, configure it via WebUI and you will have the Jenkins distribution right out of the box. Okay. So making the Jenkins initial setup very, very simple. So very, very simple terms what you have to do is you select your favorite plugins. You customize the configurations and you relax. And this is the general flow of Jenkins when you even install the Jenkins instance and configuration and stuff. So we plan to do that or make it easier using a very, very simple web user interface. So using that web user interface you can select all of your favorite plugins. You can go back and forth, customize them and then just sit back and download the WAF file and we will do all of the packaging and stuff for you. The service will then generate a ready to use Jenkins as I just said. You just need to download the WAF file and run it right out of the box without any hassle of any, you know, downloading it again and then configuring it and stuff. So we will give you out of the box Jenkins instance. If you look at it in the bigger picture, you may have instances which are already configured for AWS for Kubernetes and you know, using various Kubernetes operators and so on. So this service really makes it very, very easy for you to just download and use the instance right out of the box. Yeah, there's more obviously. So downloading community-created configurations, you know, directly using this service will be very, very helpful for most of the viewers. I would like to take you to a page right now that is the Jenkins formulas page that currently exists. So if you have a look at this repository, it is maintained by one of the mentors for this project rig and it has a set of Jenkins formulas. So these Jenkins formulas are basically WAF files or instances that you can just directly download. So Blue Ocean and multi branch pipeline, multi branch pipeline and so on. Now these are most of the common use cases. So we have formulas for them. You can download the formulas and make use of them straight away. So our service will kind of make these custom configurations that are generated by the community available to the community on a large scale. So that's one of the aims of this project. Now, instead of navigating to this GitHub repository, you will just get these, you know, community use configurations or formulas directly on our web service, which will reduce a lot of workload, you know, searching for all of this. So you don't, what if you don't know that it's called Jenkins formula. So yeah, that's going to be happening much easier. Yeah, so getting back to the presentation. Yeah, so now it's time for some demo. So let me just exit this. Right. So as you can see, so this is just a prototype. Expect some dragons. If anything does go wrong during the demo or the presentation, please mistakes on my own. But yeah, this is just a prototype. So as you can see here, this is the list of plugins. So I'm not sure all of the 1600 plugins that Jenkins has, but I have shown around 15 to 20. So these plans as you can see will be just pulled up from the update center. And you will see all of the plugins that Jenkins does provide, even on a normal instance. And what you can do right now is just add them to configuration. So say I wanted to Google Cloud SDK. If I wanted to verify status report or add it to configuration. So so on and so forth. I just can keep adding my configurations one after the other. And obviously we will give you a chance to edit configurations. These buttons are just for demo, right? But as the prototype develops or as the project develops, you will get to see these functionalities in in the flesh. So right now there's buttons. So you'll have a chance to edit every single configuration. So if you want specific configurations for say these triggers of the Azure storage, you will be provided an option to edit the configuration. The feature that we have planned is edit version. So you will also be provided with with the version to, I mean, you'll be given the latest version, obviously. But you will also be given version to be edited so you can change it to whatever you want. But do expect some bugs in this, but some versions might be interdependent. There might be minimum versions for certain plugins. It might not let you build the one if the versions not match. So yeah, that's a feature for the last phase. Also, one of the things that you will be given will be a text box. So you can provide the Jenkins version number, whatever is the latest one. And you'll also be able to provide a configuration description so that once you share it with the community, you will have a better, I mean, you will be able to show the world what kind of configuration you've made. So yeah, if you click submit right now, it will should take you to this page. Sister Dummy. So yeah, this is the page that it will take you to. You will have the Jcast YML. I haven't yet spoken about this, but for those users who don't know what Jcast is, Jcast allows you to configure Jenkins plugins via a simple J, YML file. So it's configured is one of the projects that you can go check out. It lets you configure the entire Jenkins instance using a simple YML file. So once you've configured all of your plugins, you will get a Jcast YML that you can then edit. So if I'm not happy with the username, I can just, you know, change the username. So I can change the username as I want. You then change the password, you can use secret wall storage and so on and so forth. So this one will be generated on our side. You don't have to worry about what goes in here. You just configure your plugins normally and we will take care of config generating the Jcast YML for you. So if you can see here, I will show you a demo of that as well. So as you can see, this is the SSH plugin or the SSH configuration for Jenkins. So we will provide you with a basic, very, very simple user interface. As you've seen in the slides, one of the main deliverables for the project is a user interface. The Jenkins user interface can get cluttered at times. So we plan to abstract that away from the user and make it very, very easy for him to use. So simple user interface is one of the main deliverables and we plan to deliver on it. So as you can see, this is the SSH system configuration. You can set your system message. Two number of tries, maybe maximum time on seconds, 67 seconds or whatever, 25 seconds. Yeah. And SSH TCP, so whatever Booleans and stuff, whatever checkboxes, true or false values can easily be put in here. So if you have, I mean, whatever sort of plugin that you are going to configure, you will get a basic form on this page. And once you hit submit, you will get the, yeah, you will get the Jcast YML generated to you right out of the box. So this is for the plugin configuration and you can easily configure whatever you want. I mean, down to the Packager config. So this is one of the, this is one of the heavy lifting libraries, the custom overpackager. I can just show it to you. So we have the custom. The custom overpackager is maintained by Ole. It's one of the, one of the most powerful packages. It helps you to convert a Packager config into a Jenkins right out of the box. So this is one of the heavy lifting libraries that we are going to be using for our project. So as you can see, since it makes use of configuration, we will convert whatever plugins you select into something like this. So this is an example YML or a Packager config YML. So you can see here, whatever plugins you've selected in the previous instance now show up here with the latest version pulled up from the update center. You will also have a chance to select custom update centers. If at all you're working in a company and you have your own update center, we will provide you with the option to connect to your update center. So as you see some of the versions are selected based on the latest ones. So if you, if you haven't added them and if you missed the chance to edit them, you can go ahead and edit whatever package or config YML that you want here. So yeah, and of course your task file. So this file generated here, the Jcast YML matches the one that will be generated here. So you can use this right out of the box. You can download these two as a package and then run Jenkins right out of the box without even configuring a single thing. Obviously, if you want to edit it, you'll have to edit it manually. But for initial setup, you can definitely use some of these tools right at the box. So yeah, so that was the explanation of what these two editors are. This is the Jcast YML. This is the package of the config and these two will help you to generate your custom Jenkins distribution service. So now that we, the two main ingredients that we need to generate, we will be providing users with these buttons. So as you can see, they're haphazardly arranged here. Apologies for that. But yeah, this is just for demo purposes. You will get the option to download Jcast YML. So I hit download Jcast YML. Yeah, as you can see in my bottom left of the screen here, I have the cast YML downloaded. It has eight because I've done it many times over. But yeah, so you will get to download individual files. So if you, if you download the file, you will get a chance here. There you see. So one thing I forgot to mention is that you will also get to download the Docker file. The custom package that has a pretty neat job on generating a Docker for you. So we are leveraging the custom water again to generate and download the Docker file. Another good thing is the thing that you are here for is downloading the Wi-Fi. So this might take some time is the Wi-Fi and I've not provided a spinner. Apologies for that. The spinner will let you know how long it will take to download the Wi-Fi because we are doing the entire generation manually. So if you can see this, not to go too much into the code, but if you see this terminal, this is what's happening. It's building the war in the city libraries that are there. This might take some time. It will happen. I think so we don't have to worry about that for now. So yeah, if you, if you still think that you need to add more plugins, you can go back to add plugins to configuration page. It will take you back to the initial initial kind of pages that you have for all of the again. And then you can add more plugins to it. So this is all about the configuration. One thing that I would like to add in addition to this is the rebuild configurations page. So the build configurations page actually let you as a community develop as many configurations as possible. So if you're developing the configuration as pipeline or cast plus pipeline plus it has Kubernetes or whatever. So we will be arranging these plugins in kind of just the way it's arranged on the Jenkins plugin site, relevance, most used labels and so on and so forth. You can even search for those plugins of search feature doesn't work for now, but I've just provided a bar there so that it signifies that it's a prototype. But this is this is what is the main aim for this page is to be able to let the community provide, you know, the most used configurations. So, so as you can see, if you click on your configure to take you back to this page and told you these are the two main ingredients you need. So as you can see here, I've selected the multi branch pipeline. So I did show you earlier that it is picked up from Jenkins formulas. So if you can scroll down here, the multi branch pipeline is right here, the ocean plus multi branch pipeline. And as you can see here, that's the same thing that is downloaded. So this is this comes with a host of plugins. So if a user has developed one of the most famous configurations, you can just use it right out of the box without having to configure this file yourself. So you will get this file. Sometimes you might even get the cast viable if it is supported. If it isn't, you might have to configure it on your own. But I guess most of them do come with the, yeah, most of them do come with the cast viable. So yeah, it's about it for community configurations. So just remember that if you community configurations, you can find them, you'll be able to find them here. That was one of the main deliverance of the project to take you back into the slides. Community shared configurations. So I've covered simple user interface community shared configurations and easy access around the world. I don't have any prototype for this right now because we're still figuring out how we can make it very easily accessible for servers around the world. So this might be related to reducing cash in latency and so on and so forth. Yeah, this was one of the deliverables that I would like to touch on. Okay, so now that I've covered most of the major aspects of what you will be expecting from this service. So now the question that pops up in your mind is how can I share this entire configuration. So now that I've developed say I've developed something, some configuration that is pretty used around the world and I want to share it. I will be providing you with a creative pull request. So we plan to show these configurations in something similar to the to the Jenkins formula space. So as you can see, we have the formula space right here. We will try to use this again maybe to show store most of the common configurations. So if you can see here, I'll just show you a demo of it. So you can write a pull request decision. So this pull request describes a package of config and your branch name. So maybe demo six, demo five. So what will this will do is it will open a pull request in in the most in this repository for instance. And once the Jenkins community or the Jenkins they maintain us the repository view it will have the chance to merge it in. And you will have a chart that you will have it displayed in the prebuilt configuration so that the entire community can use. We will be adding support for storing the configuration in private repositories, but for now that's not supported yet. So if at all I hit submit. You should probably see. Yeah, here it is. So this is a repository for now. It is not one that is this is just a sandbox deposit. So as you can see, the pull request shows the description. It shows you what files have been changed. It adds your entire configuration file into the pull request. So the maintainers can just review and merge this pull request. So maintain a review and merge this we get more than it will show up into your most used configurations. So just go back for a second. Yeah, here it is. So yeah, this will show you the link and you will be able to check out where the pull request is exactly. Just a disclaimer, the project, the UI might look a bit different than what it now is, but we will be working on fixing that if you have any doubts or issues or the way it's handled. So this was about it for the entire configuration. I do not think I'm missing any other major feature. So that was it for this part of the demo. Let me take you back to the side for a second. Yeah, so you know how to get more involved. So yeah, so how you can participate. So we are planning on users, if users can test out more of the configurations, it would be really helpful for all of us. So the GitHub link is, this just keeps changing. I'll use my pointer. Yeah. So this is GitHub URL. I'll still take it to you in a second. This is the GitHub URL for the project. This is the GitHub chat. So you can come in and say hi. And we do have the project links. So if you want to visit the project links, you can. So I'll just take you to the data chat for an instance. Yeah, this is the data chat. So please feel free to jump in the data chat and provide as much feedback as you can because this service would benefit the community. You can check out the project at custom distribution service. Just let me. Yeah, so this is the repository. Feel free to participate in code reviews in maybe opening new issues when you test out the repositories. When you feel that there is something that you want to provide in it. Please feel free to jump in and, you know, make suggestions. Yeah, that was about it for that. Okay. Coming into what's next. So we have the GSOF is one that is starting from today. For the end of this month and GSOF is divided into three main major phases for those who don't know. This is just phase one. So what we'll be doing is we will be focusing on implementing the project. That's sorry for mentioning that. But yeah, we will be implementing. I will be sharing with you the milestones in a minute, but we will be implementing most of it and more discussion and brainstorming. So that was the entire point of this prototype so that we can have more discussions and brainstorming on on on the majority of the topics. So yeah, so taking you to the milestones plan, this is the final slide. We'll take you to the screen here, which will show you the entire list of milestones. GSOF phase one. So yeah, this is the entire list of milestones that we have planned for the fate for the entire phase one. They are divided into two major events, the custom large generation and the homepage obviously because you want to be able to select plugins. So we will, we have divided them into very, very small minor tickets. So apologies if you if I don't cannot read all of them. But yeah, two major one is the large generation and entering homepage for phase one. If you feel that you that we can add any more features please feel free to open an issue or ticket here. But yeah, that was about it for the entire milestone generation. I think that done for the planning so for the demo. So yeah, thank you everyone for attending. I'm going to shift over the mic. Thanks for your presentation for them. So are there any questions from participants. So we didn't get any questions in the zoom corner. But if you have some, please feel free to ask. So, yeah, regarding myself, we have meetings on almost every week. So, I think that I don't have specific questions. Slavin, maybe one item is about jcask configuration, et cetera. Do you plan to integrate the service with the verification tools you have created during the previous year? Yeah, actually that was we discussed that in the previous meeting. So if we are able to generate a jcask configuration, we will be taking it through the entire verification. Thank you. Yeah, that's good. Thank you. Also a question regarding docker images. So what exactly would you allow to download? Would it be a docker file or would it be just a docker image? So for now we're just allowing a docker file because the Jenkins custom backup gives us that out of the box. So you can definitely download it. But if we do have a chance to hold it on docker, it would be even better. Yeah, that is one minor detail about the implementation that the docker file produced by customer packages now. You won't be able to just download it and build it. So there will be modifications needed if you want to achieve such flow. Yeah. So yeah, what I'm planning to do with customer packages is actually at support of Karnik builds so that you could actually run the build of the image within customer packages container so that it can produce the image on its own. But yeah, I'm not sure what would be timing for this feature. Yeah, maybe if we could, I mean, if I don't be complete some of the distribution service generation early, maybe I can contribute on that. Why not? Any contributor? Much appreciated. So yeah, maybe for everyone else, could you please repeat what would be the best communication channels somebody wants to contribute? Yeah, so I think I can share my screen. So the best would be the Gator channel so we are very, very active here. So feel free to join. You can post your questions, discussions query, even if you want to just say I just jump in. So that is the primary communication channel. And also I can take you to the project page so just give me a second. So if you have meetings, so you can find the meetings. Yeah, so meetings are scheduled every Tuesday and every Thursday. So if you want to attend, please come to the Gator chart, you'll find the meeting link there. Or you can also find the meeting link on the Jenkins event calendar. Jenkins event calendar. So if you look at the Jenkins event calendar, you will find the custom distribution service. It should be on Tuesday. So you will find the link if it is in postage. Yeah, I also posted one link to the chat for the Gator channel. So in the case of any questions, Gator is a great entry point. So are there any other questions or comments from participants? Looks like not. So thanks again for your presentations. I'm looking forward to keep working with you. And yeah, we will have another presentation at the end of the first coding phase in one month. By the time let's see whether we get a working service or whether we keep working on that. But we still have three months of coding today. It's just an official first day. See you again in a month. Thanks for a demo. Thanks everyone. Thanks all.