 Are we live? Yeah, okay. Oh, hello everyone. My name is Martin and I'm here with the Google Summer of Code participants for the coding phase two part two demonstrations and So welcome everyone All right, so let's go through a quick introduction of Jenkins in Google Summer of Code Then we'll have project demos by our students and we'll have question and answer session Okay, so this is our fourth year in Google Summer of Code as the Jenkins organization This year we had about 20 project ideas When we started we were able to accept seven students So we now have seven live projects We have two to four mentors per project this year, which is great I don't I don't think we we had that in the past years And we're having projects from both Jenkins and Jenkins X And you can see on the slide down on the slide the link to our list of projects Okay, so which GSOC organization are we we are the Jenkins? organization and this is where This is the organization that's hosting the Jenkins and Jenkins X projects the Jenkins organization operates under a an umbrella organization called the CD foundation And they have their own Google Summer of Code projects and The CD foundation, I think I believe operates under the Linux foundation. Is that correct or leg? Yeah, that's right Okay, so there's yet another umbrella organization on top of all of this and it has its own Summer of Code projects We have seven projects this year as Mentioned earlier the custom Jenkins distribution service get plug-in performance improvements GitHub checks for Jenkins plugins machine learning plugins for data science Jenkins windows services YAML configuration support external fingerprint storage and Jenkins X apps and add-ons consolidation okay, so With the link to the presentation you can click on these hyperlinks and visit the pages of each project Our communication channels should you wish Should you wish to reach out to us? So we have the mailing list, which is a google group We are on Gitter under jenkin ci slash jsoc-sig sig for special interest group The regular office hours are on Wednesdays online slash as needed And they're announced in the Gitter chat The different projects have their specific channels for communicating For member communication. So you're welcome to join them And participate and Jenkins X uses a slack and there is the link to their channel We want to also recognize and thank our students our mentors Our org admins and the community members that participate actively in the In the summer of code projects the people that participate in the mailing lists with advice answers responses We also want to thank the subject matter experts who from From from give that give us guidance and advice so Google summer of code and Jenkins would not be possible with Everybody participating the way they are today. So thank you everyone for contributing All right, so yesterday we Had these demos and today we're going to have the next set of demos And they are the following we're going to start with Custom Jenkins distribution build service by Sladin Following that will be machine learning plugins for data science by Loki And the third presentation today will be Jenkins windows services by buddhika. Okay. So before we start um, I should pause and Ask if there are questions or remarks or additional things that People on the call would like to add Just thanks again to all contributors this year Because as you will see today and as you may have seen yesterday All projects evolve really well. We have something demoable and in many cases already available to Jenkins users So, yeah, I think that the main objective driving Jenkins evolution Manifested attributions, shank experiences, all of that is working really well this year So thanks a lot everyone Who's involved in JSOC It is impressive how many of these things are reaching users already even before the end of GSOC. Thanks very much to the students Okay, let's get started with our first presentation the custom Jenkins distribution build service By Sladin. I will stop the screen share And Sladin you can Take over the share Yep, thanks Martin. Can you hear me? Yes, okay, I will start screen sharing Okay, give me a minute. Yeah, that sounds good So, yeah, hello everyone. Um I'm Sladin and I'll be presenting to you the Jenkins custom distribution service phase two Um, I hope everyone are doing well Um, okay, so let's begin So, uh, before I begin I would just like to introduce my mentors We are we have Kristin Martin Rick and Parichai and we have Oleg as well as as a technical advisor on the project They've been very very helpful. Um throughout this phase too So let's begin. So let me just recap about what the project is about It's about building an out-of-the-box usable Jenkins distribution with a very very simple user interface um With the ability that the community can share configurations So if someone develops something that is widely used Um, it can be shared And we also try to maintain easy access around the world So we try to make this service available everywhere because usually users have problems with accessing certain Um, certain maybe the plugin um site or something else So, uh, this service would be available self-hosted So if you want you can, um, post it to yourselves and take all the advantages that the the custom distribution service package will provide Yeah, so moving on So what's new, um, let's talk about what was added in phase two and it's been a really really good phase So some of the major things that were added war was the war generation as you remember The last time we had the phase one demos you could generate the war, but you did not have the ability to download it So we have added that ability now you can download your war Pull on with your customization with all of your plugins and all of the If you want to build it off a base docker image and so on that comes with war generation Um, you can now filter plugins. So you you don't have to search for them If these plugins are part of the most used plugins Um, if you want to find the most trending plugins so on and so forth We the service now provides an ability to filter them Just like the plug inside us Okay, so moving on the ability to search and download community configurations One of the core ideas of the custom distribution service was the ability to be able to download and Search your configuration. So it's in so it's very easy for the community to now to now sift through all of the community generated configurations and And you know, uh, download them maybe have a look at them modify them and even re-upload them in some cases So that's that's been added. Um as an additional bonus And the ability to share community configurations, obviously So the last time you remember we came out with the community configurations concept, but there wasn't any Uh, there wasn't any central repository to host it We now have this the community configurations repository up and running on my personal account And we will be taking necessary steps to To share that repository, uh, under the Jenkins organization. So it's a one place Um, one place area to to share configurations. If you do not like to share configurations via that repository, um, We will have multi repository support So if you have if you are working in a private company and you have your community configurations on a specific repository You will have the ability to configure that URL inside our environment So, um, we have that feature support Okay, where can I add the new configurations? So you can add the new configurations on the link given below. Um, it's the custom distribution service community configurations And this is a temporary location for the community configurations until they are hosted inside the Jenkins organization um, if you you can still add configurations to this page as of now, um, They will be uh, once the repository is hosted under the Jenkins organization You will be able to see them under a single umbrella For now, you can definitely visit this, um, this, uh, this page the GitHub repository once they come out of my demo I might be able to show you, um To show you the GitHub repository as well. So I think the next one is the demo. Yeah, it's time for enough of talking Um, let's get let's get straight to the the demo. So, um, yeah, so let's get out of my screen Okay, so, um, as you remember the last time for those who are present at the phase one demonstration The page for the for the plugins for the plugin cards remains the same the additional feature that we're talking about here is is the ability to be able to search to be able to I'm sorry filter plugins Based on their Trending based on the title the release date and so on and so forth. So if you want to add plugins according to According to their filters, you can definitely do so So for this demo, I will be adding a couple of plugins to the demonstration to the to the package and We will be able to have a look at how the custom war package or the service functions Um, under them. So it doesn't really matter. Okay, sorry It doesn't really matter what plugins you're adding for now since it's a demo But if you do have a specific configuration say the For a particular kubernetes operator or so on you can definitely search for those plugins and add them So I'll be adding just a couple of plugins from different places Yeah, so this one stays the same As the last time. So I'll be adding The title the bar version The artifact dining. So these are just uh, uh, pre configuration items that I've already selected This is for demo purposes You can add your docker tag. So if you want to build build the I'm sorry the distribution on some base image. You can do that as well select And you can hit generate package configuration and there it is So what the service now does it's it's much faster and pulling all of the plugins in the last time you remember It took it took more than 30 40 seconds to pull in all of this data and generate the configuration It's much faster because of the plugin caching. Um, as you can see now you can You have whatever plugins I've added in in the past step So we added the cucumber reports and the as editor and you can see them under under plugin So you also have the docker the docker tags and stuff Along with the bundles and whatever description you've added So, uh, yeah So for the first time you can download the package of configuration if you want to run as is if you want to just download this Um, you can hit it and you can see it's downloaded on the bottom left of your screen So for this demo, I've actually picked out a configuration that generates, you know In a lesser time because war generation is a is a time-consuming process and I've picked out a configuration that is That is much faster to generate. Um, so This is just for time purposes so that it the generation does not take more than you know Because the generation sometimes takes a couple of more than a couple of minutes So I would just be copying a single one year and I'll be explaining to you what this is So the reason I've chosen this is first of all, it has a docker base, but it does not have built set to true So we won't be building any docker image. Otherwise the war package just sets out to go ahead and download all of the The images and some of those images can be 200 300 mb, which takes a lot of time Also, the another thing that I've added here is we do not have a configuration as code setup So if you would like in the future to have configuration as code, um, um The feature supported, please do leave feedback in our feedback channels and we will try to make that happen Okay, so now moving on to the download bar. So the the demo the most important part So I'll be showing you the terminal so that it is um, because it's a self hosted service and you might be able to Um, you might want to see what's happening. Um, if at all this is hosted, uh, even on a server you Should be able to see it. So I've hit the download button And yeah, so yeah, I'll take up I'll take up I'm sorry I'm sorry Yeah, um, you should Okay That was okay So, yeah, um, as you can see, um You'll have the plugins downloaded. Um, and all of the all of the custom war packager Services that are being running in the background. So yeah, as you can see You have the build successful and um, once that is done, um, the custom war packages just returns the Returns of war back to us and you can download that as well. So yeah, so just give it a couple of minutes Yeah, there it is. So in the bottom left of the screen as you can see, we have the warfire generated. Um, You can now, uh, run this command as your normal Jenkins watch so you can run the Java jar Jenkins one and it'll Spin up with all of your um, with all of your favorite plugins. Um, Yeah, this was uh, downloaded the demo. Uh, you did not have this ability the last time and now it's been added to the customs distribution service. So the one of the most major Major milestones for this entire project has been has been achieved, which is which is great. Um, Okay, moving on to something else that was added. Um, let's go and have a look at the community configurations. Okay So the community configuration right now is an empty place because there aren't community configurations But I have added a sample. So, um, in the previous slide if you remember, I I said that you can, um, This is the place where we had our, um, let me just see if I can So this was the place where you can, um, we can see all of our configurations live added by the community. Um, this is just an empty repository for now. So you have the sample empty configuration So if a user adds a configuration here, you will be able to see it on our service So for now, it's just a sample sample empty, which has been picked up from Rick's repository So what the service does is once you point it to your the repository you want, it will just go ahead and fetch it So as you can see the configuration name is sample empty. We do not have the description as of now Because we do not have support for the need me. Uh, but yeah, if that is a question that you want answered Yes, we will be having a description later on. Um, yeah So once you can see this, you can now you can now click to view details If you click to view details, it will take you back to this page Uh, you now have the yml and you can repeat the exact same features that I repeated for Um, for generating my own custom packages service So if if there is a very popular configuration that you want to write out of the box, you can just view it Um, have it senior and then you can just download it. Um, so yeah Okay, because we do not have the Jenkins version specified. So yeah, you'll have the error as well Um, yeah, so that that was it for the community configuration page Um, if if um, I do not think there is anything else that is left. Um To be shown. Um, but yeah, that was uh, that's that was it the three major features of the ability to filter plugins Um, the ability to download the bar file and the ability, um, to search community configurations as well as Create an open pull request. Um Do this repository so that you can you can host whatever plugins you want. Um, is an additional feature Um, yeah apart from this, um I've also just I think shown the repository. Yeah, that's it. I think that that was it. Um, yeah, so I can enter I can enter, um, the presentation mode again and Okay It's free loading just give it a second. Okay. Yeah, so that was it for the demo. How can you participate? So we have our communication channels on github. Um, the Jenkins custom distribution service Also, we have the project page so you can click on these URLs and have a look at them for facilitation of feedback Okay, what's next? Yeah, this is something important. So we have the gsoft phase three coming up um So what are we doing in phase three? I'll just recap in a minute before that We would be focusing on improving the user experience even further So as we reduced the time to fetch plugin We would be we would be making things much much easier for the user so that you know What's happening on the screen? For example in download a wild file or when you download a package or service You can don't kind of have the feedback right now. We will be adding that in the next phase um Yeah, one of the major ideas we were exploring is the idea of having an image controller inside the service Um, a sort of since it's a generator service We were exploring the idea of having a multi uh, a multipurpose image controller or multipurpose image generator Discussions for those have begun. Um, I will be posting up An email in the mailing list for users to to have a look and facilitate feedback Yeah, but that was some of the major Stuff that we were looking at for phase three. So I'll be coming out of presentation mode and Having a look at the milestones for phase three. So just a quick recap of the milestones for phase three. Um Yeah, so Just just two of the major milestones was having an initial version released We do not have an initial version released as of now, but we are very very close to that Uh, that and unit testing for all features. So a couple of features have unit testing remaining So we will be having a testing plan a testing architecture for that And and of course the image controller synergy. So, um, these are the three major milestones that we will be exploring for For phase three along with uh, adding adding additional features like maybe improving the user experiences that are having a developer's guide Yeah, apart from that, I guess That was it for for the demo. Um, let me just have a look if I'm missing any slides Yes, okay. Um, yeah, that's about it from uh, from the demo. Um, I'll be giving the mic back to martin and I can move on if you have any question Thank you slide in. Is there any questions? Not for me, but Looks really great And now it really operates. So there is no stops left So it's a pleasure to see How it works in real I launched it a couple of days ago Well, basically a following guidance is what it's pretty fine So thanks for preparing that and hopefully it will be really useful for those who want to customize Jenkins instances Thanks, uh sliding. This is Yanis, I'm just I'm one of the mentors and I'm really excited seeing this Plug-in because I see a lot of utility in the space that I'm working in where we want to build custom configurations for example for life sciences and data sciences for Jenkins and I think this is going to be a great tool one quick question is What are the advantages of these custom configurations versus a docker image with Jenkins and certain plugins embedded in there Yeah, that's a that's a great question actually. So, uh, the ability to have Custom configurations is um is is actually so if you have a look at the custom warpackager It it doesn't quite actually generate as of now docker images But I think that was on the roadmap sometime ago. So it is actually similar But the way the custom distribution service operates it does It takes it picks off the custom configuration of a yml. So You can have that entire configuration in a docker file as well if you want it So it's it's essentially the same. It's essentially the same thing and it's very cool Well, actually a custom work packages. So the engine on the hood has a few extra features So for example, it can package components in development Because it doesn't just install them. It also Provides builds facilities. So for example, if you want to apply a custom patch, which is submitted a pull request Or if you want to provide experimental incremental build, you can do it right away with custom warpackager In addition to that it can actually package not only plugins It can package a jcast configuration groovy hooks custom system properties additional libraries Right inside the work file so that it produces a portable instance For the for docker images. Yeah, it produces pretty much the same image as you could produce with existing official docker image But yeah, the real value there that it can package multiple formats And it can utilize Jenkins features to really produce these artifacts, which is not possible with standard tools Looks great. Thank you Any other comments questions? Oh, just before I just before I go, I would like to thank all of my mentors of Martin Christian Parichet Rika as well as like for the amazing support in Facebook. It's been absolutely amazing. You're welcome Yeah, right. I was about to jump in and say it's been this has been a good mile or a good phase too. Um, and It looks really awesome I love seeing all the like the ability to download everything kind of grouped together and the searching and the community configurations It the project looks really great. So good job over this phase I abandoned the same the direction. So It's good. Thank you. Sliden Okay, let's move on to the next Demo so the next demo is Machine learning plugins for data science by logi Okay, let me stop my share And logi you can go ahead Yeah, thank you, Martin uh, I'm not sure my screen So So am I audible to everyone? Yes, we see your screen and we can hear you. Yeah That's perfect. So welcome to my presentation for coding phase two. Um, so Let's move on to slides. Uh So a little introduction about me. Uh, I have I was selected for dsoc As a student for machine learning plugin in jenkins and I'm doing computer science And engineering in the university of murdoch So Before we going to the phase two features, uh for the summary of phase one The first thing is we have done A Implementation on configuring connection between a jenkins instance to a python kernel Next we have Added the features to copy the notebooks, uh, jupyton logi Logi, I think we're we're still seeing your first slide your introduction Are you moving your slides? Yeah I maybe you're not sharing the presentation slide Yeah, maybe you have two screens Sometimes now you get the same issue this uh, the book slides Yeah Is that visible right now? Uh, we see your screen, uh, but yeah, I guess I was asking whether you Switch between slides Because it was on the landing Is that better? Yeah Yeah Thank you. Yeah Uh, yeah, so, uh Uh, so yeah the summary of phase one, uh, we have done Some features like the first one is we we have done work on, uh, configuring connections between jenkins instance and python kernel And next we have done, uh, a feature that I can able to copy jupyton notebooks, uh, to the workspace from the local system And then, uh, a nice feature that, uh, that that have the ability to Convert jupyton notebooks to python and jason In the midst of jason, uh, zeppelin used jason type of jason type of notebooks So we can also able to convert jupyton notebook to jason also So for the main features we have done, uh, we will We we we were able to run, uh jupyton notebooks and python script or jason script. So these are the abstract of my Phase one So these are some, uh, screenshot from my phase one These are phase one coding phase one. So here it is, uh, this this screenshot shows, uh, How we configure a kernel, uh, in the jenkins and you can see here. This is a How we are adding, uh, jupyton notebooks from the workspace and how we are converting, uh, this Notebooks to other type of file formats. So I will, uh, explain and I will show a very detailed in the demo So this one is, uh, our main, uh, python builder We can you either we can use a direct, uh, code passing or a file passer. So here we pass the notebooks So next we move on to the what what we have done in the phase two So as, uh, python two is, uh, deprecated from 2020, uh, we had to update our plugins to support python three and We extended the plugin to support master agent communication because, uh, jenkins has the very very Very interesting features to communicate with jenkins agent and master. So we have to leverage that feature to extend our plugin and uh, we have published a very descriptive documentation, uh, on our Github repository on readme So we we also have tested the plugin with virtual environments, konda and windows environments So apart from this, uh, there are lots of bugs were fixed during this coding phase two So we are, uh, like We have already started the phase three because, uh We are, uh, so there are There are some of features has been added to the jitter repository. So Uh, this is the progress for this gsoft phase two And before we go into the demo, I I would like to explain a little bit what we what's going on the demo so In the master, we have, uh, two, uh, agents so we can create agents that will be separate the process from the master So in the in the gpu agent, we are excluding our, uh, gtub code We are we are getting the we are getting the source code from the gtub and we are excluding the code and if you want if you want to get the, uh Data sets from the other storage we can do that from the gpu agent That we gonna create, uh, in the demo So this is the best practice to, uh, to separate the process from the master Then we are doing a machine learning, uh, machine learning workflow So yeah So before we're going to demo, uh, it is more like than a tutorial like, uh, how a users can, uh Get get help get get to run our plugin with the docker agent So I gonna use a pre-built ml docker agent It is in my docker hub repository. I will show, uh, how to build your own custom docker agent And then we will, uh, configure the agent then, uh, we will get the code from the cheat Finally, we I will show, uh, the outputs, uh, from the notebook So yeah, so let's be, let's jump into the demo So, uh Is that visible my, my gengis dashboard Everyone can see that Yes, we can see your genkin's local host Yeah So first of all, I have to, uh, configure my ipad server So in the prefiguring system, I would, uh, like to add our server here So we can search for, uh, server configurations. So yeah, I have already added, uh, one server So if you want to add a new server here, you can just name it server If you want to add the server IP address, like if you want to run the job in an agent I think you have to give the IP address of the docker container, or you can just Simply do a local cost because it's running on, uh, on the agent so So for the launch panel, it's five seconds and I'm setting the, uh, max reserves, reserves, max reserves to 30 because, uh, it means, uh, uh, how many, how many lines can I get from the ipad and kernel return when a notebook executed in the ipad and kernel So I'm going to save these configurations here So next, uh, we have to create, uh, uh, agent I have already created one. I have created the agent gpu because, uh, we We are going to test, uh, cheetah repository that has, uh, jupyter notebook Can you see my, uh, repository? Yes, we can see your screen. No problem Yeah, thank you. So here we have a notebook So we are going to run this notebook, uh, from our Jenkins agents So for that, uh, we have to install some other dependencies like, uh, numpy, scipy, phyandas, and scalar So, uh, it takes time to install, uh In agent so I have already, uh, I have already installed Okay, I have already installed in the gpu agent, but I would like to, uh, I would like to Share how to create, uh, agent here So it's a quick process. So you can try new note. You can just agent So here, as we said, the name is agent tpu and you can use these, uh, uh, help buttons and, uh It's it shows what the parameters refers to so you can use that and for this remote route. I will add a home Jenkins And for the label label means, uh, if you want to, uh, if you want to point the agent in the job description You have to add some labels for the agent. So I just adding tpu I have already added a label to my agent tpu. So we can get the Get both, uh Labels in the job description. I will show you in the description So here we have two options. So if you install the ssh plugin, it will show a three options. So For this demo, I will show, uh to launch how to launch through the command line So here I'm I'm using, uh, my pre-built docker agent So here I'm initiating my agent. I have built in my, uh, in my local machines. If you want to, uh, if you want to build your custom images, you can easily, uh Go to our repository I will show this So you can go to, uh, Jenkins machine learning plugin and you we have the docker files and the requirement or text If you want to install, uh, other python dependencies, you can, uh, add behind these, uh dependencies and you can, uh, build the plugin as you want. So In this demo, I am going to use my, uh, agent. Uh, it has the basic three, uh, three dependencies, uh, Jupiter, uh gprco and a protobuf. So So we're gonna start this, uh agent So here, uh So it will be started within few minutes, few seconds Yeah So Yeah It's has started And for this demo, we will use the agent GPU. So I'm going to create a new job here I like to So here you can, uh, select whatever server you have configured in the global configurations So I'm going to select this one and for the cheat repository, uh, I'm gonna get my, uh, uh, that, uh Sample repository from my cheetah repository So Here I'm pasting that Yeah So, uh, and uh, I forgot to say the agent. So here you can, uh, search for the labels you have specified, uh In the configuration of agents. So I'm gonna use the GPU agent So if you want to, uh, if you want to convert this, uh, train, total train model that I find this is a notebook If you want to convert to this, uh, to a python, uh, it's possible with these features Uh, you can add, uh, train So if you convert if you want to convert it to python You can just write and if you want to save in a different name, you can just add train dot five Yeah, so So finally we have to add, uh, I python builder here So if you want to directly run the code like like python scripts like print, uh Or something like that if you want to do that, you can do here But uh, in this demo we will I will show to run how to run this train dot five So here I'm adding this friend of five So if you want to, uh If you want to install more dependencies here, you can just add a shell script and you can install Pipe install dependencies. So that's a common case in the machine learning field So we are all set with these configurations. Uh, yep So we're going to save it I'm going to show you here That the system is running in the agent here So, yeah So we can see, uh, the train model life can be copied and converted to train the python So we can see other parameters here. So the model has has saved this model In our local in the in the agent in the agent's file system So further we can do or deploy or test this This model and we can do or if you if you want to push this to s3 storage We have Jenkins have the plugin s3 publisher. So we can use further for the For the development Yeah So, yeah, that's all with my Phase two demo I will go to my demo presentations Yep, so So In the upcoming features, uh, we have we are exploring about extracting core segments from the notebook with the use annotations and And and we have already uh merged this feature with our with our master and we have to also we have to We have we are expected to do this generating case and with the results and also we are expecting to test our plugins and There are a few tests have been Right, I have been written to this uh, repository. So we will be focusing in the Next phase three So, yeah Let's solve with my Phase two and I will I would like to thank My mentors Bruno ironies and she right for the huge support and also thank for the org admins To this opportunity to help Jenkins can we? Thank you Thank you, logi. Are there any comments or questions? for me Yeah, there is no other questions But I want to ask about whether you considered using machine learning plugin for analyzing data produced by Jenkins for example built reports test results because yes, since we have access to Jupiter and also to apache zeppelin. We could actually do a lot to try the Self-analysis features to Jenkins just by using this plugin That's right Yeah Do you consider experimenting with such use cases? Uh, you're asking about analyzing this, uh, uh, the data science field? Uh, well We can just take one example. So there is built failure, uh, analyzer plugin in Jenkins Uh, but yeah, it has a lot of limitations But at the same time, for example, if you use a machine learning plugin, if you're able to Just analyze a build logs find some correlations, etc. We could actually use this plugin in order to improve Another source of Jenkins bits. So yeah, yeah, we can do that. Yeah Yeah So it could be an interesting prototype. No, I understand that it's not the key use case and that machine learning carry is huge So we shouldn't be limited just by Jenkins use cases but yeah theoretically it could be helpful for common Jenkins users because Jenkins itself is a source of big data for sure So that is something we could process there Oh, like that's a that's a really good idea. Um, it's not really something that we had thought about But this gives us some some new ideas on how to Sort of Expand the utility even to, um, you know, the DevOps operations, right? I've got a specific case on ci.jenkins.io if you're interested in exploring it specifically where As an administrator of a system that runs thousands of builds on on a thousand plus plugins Finding failures that are systematic is really difficult. So machine learning feels like a great way to help me be more effective Great idea. Thank you, loge Okay, any other comments or questions All right, let's move on to Presentation number three. Let me quickly share my screen third presentation today is the Jenkins windows services yaml configuration support and this will be presented by buddhika All right, let me release the share and buddhika You can start your presentation Yes, we can hear you Okay, uh, so, uh, welcome everyone to, uh, my presentation on jiss of 2020, uh, coding phase two Which is on jenkins, uh, industry stripper Yammel configuration support So, uh, first I will introduce myself in brief. So I am, uh, buddhika teronggan I'm from Sri Lanka. I'm manager of multi new city and This is the first time of google summer of code mine And uh, I have a little bit of experience in web development in england That's my background Okay, let's move into the uh windows service wrapper So if you talk about, uh, windows service wrapper, so windows service wrapper is a tool, uh, which are Obviously developed to run Jenkins as a service, uh windows machine. So that feature is bundled into the Jenkins core and this windows service wrapper tool is, uh, configured by XML file. So that was the, uh, current, uh, current it was, uh, it is configured by an xml file. So You can find the project repository by the following link and So if you talk about the current configuration, so I mentioned that configured by xml file And the xml file name, uh, I should be the same to the executable file name and I should be located in the same, uh directory where the windows service wrapper executable is located And the problem in One of the problem in the current implementation, we can't specify the configuration file From the command from explicitly and so we have to use the same, uh, name and we have to locate it in the same location and uh, next Let's come to xml configuration. There's a no schema validation and There are a limited number of, uh, validations as well. So you can find the xml configuration files in, uh, following link So, uh, this is how a sample xml configuration file looks like. Yeah, it's great, but, uh, it's kind of, uh, unless human readable and, uh, I know xml is great for configuration management, but But at the moment, I know, uh, it's a little bit of, uh, less human readable. So, uh, what we are going to do in this project is we are moving into, uh, configurations as a yml file. So that's what I'm going to do in, uh, this, uh, use of twin twin presentation. So, uh, why we are moving into yml configuration. So we all know yml is, uh, less verbal and much more human readable, uh, than xml or json and also yml is lightweight than xml, uh, and json, you know, which are not using, uh, extra delimiter slide records and, uh, and also, you know, uh, yml is becoming more popular among, uh, configuration management tools. So, uh, it's obviously, uh, uh, very reasonable to, uh, move into yml configuration. So, in the future, uh, developers can easily, uh, configure, uh, window storage wrapper, uh, with yml. So this is how the yml configuration file, uh, looks like. You know, you can see, obviously, it's much more human readable than, uh, xml version. So, uh, yeah. Okay. If we talk about the project scope, uh, obviously, uh, I will add the yml configuration support for the window storage wrapper. And, uh, as I mentioned before, you know, um, there's no, uh, we can't, uh, at the, uh, at the moment, we can't specify the, uh, configuration file from the, uh, command line, uh, command line interface explicitly or when there is, uh, schema validation, we can't skip the schema validation at the moment. And, uh, we want a kind of, uh, structured way to do that. So, at your new CLI was not in my, uh, first, uh, plan, but, uh, when, uh, we, uh, come up with the project and, uh, we identified that, uh, it's a kind of, uh, needed feature. Uh, and, uh, obviously, uh, xml schema validation, uh, feature will be added and, uh, yml schema validation, uh, feature will be added. So, if you talk about, uh, yml configuration support, so, uh, these are the tasks I'm going to do under the yml configuration support. So, yml object mapping, uh, it's already merged with most and, uh, we are using yml.net, uh, library in order to, uh, uh, mapping, uh, yml file into object. And, uh, we have to validate configurations on the startup. It's, uh, because, uh, we, uh, at the, uh, at the current implementation, if we, uh, consider the current implementation, uh, uh, the configuration are not validated the startup, but, uh, what we are going to do in, uh, these step is, uh, at the, at the current implementation, uh, uh, compiles are validated, uh, on demand. And, uh, what we are going to do in, uh, this project is, uh, we will, uh, validate configurations on the startup. So, we will, uh, have, uh, breaks in, uh, runtime, uh, because of, uh, invalid configurations. And, also, uh, we will not talk to, uh, obsolete the xml support and, uh, we will, uh, we will have both xml and yml support parallelly. So, definitely, we have to, uh, extend the, um, uh, sort of windows server to support both xml and yml and it's, uh, having already merged. And, uh, if you talk about, uh, and, uh, in, uh, windows server, there are, uh, extensions, and, uh, which are used for, uh, various purposes. And, uh, currently there are two, uh, internal extensions, uh, such as, uh, Ranami, a process killer, and, uh, I think, uh, a shared direct remapper. So, um, also, uh, these extensions are, uh, configured, we have to, uh, provide configurations for these, uh, extensions as well. So, uh, we, uh, we will, uh, provide those configuration from the, uh, configuration file, uh, that we are used to provide configuration for windows server as well. Uh, so we have to, uh, update the windows server to, uh, support, uh, yml configuration for those extensions as well. And, uh, if you talk, and, uh, yml configuration documentation, and, uh, I have, uh, uh, it's already merged and, uh, yeah, uh, you can find those implementation in, uh, given, uh, links. So, uh, if you talk about key updates in, uh, yml configuration support in phase two, uh, as I mentioned, I, uh, extend the windows server for, uh, to support both xml and, uh, yml configurations, uh, you can find implementation in the given link. And, uh, yml support for extension, I just started it, uh, it's kind of challenging actually, uh, I mean, uh, those extensions need, uh, different structure of, uh, configurations. So, uh, we can't actually, uh, provide kind of a structured, uh, little, uh, configuration we have to, uh, dynamically, uh, query, uh, our configuration object in order to, uh, fetch in those configurations. So, I just started and it's, uh, becoming more challenging and, yeah, it's really interesting. I think, uh, it's a great opportunity to, uh, uh, learn new things. Uh, and, uh, I hope there are new things to learn in this task. And, uh, the yml configuration documentation. So, uh, as I mentioned, it's already merged, but it's, uh, almost a copy of, uh, xml configuration file. But, uh, I think, uh, uh, in the future, we will, uh, move into, uh, we, we will move into, uh, like, uh, something like, uh, Windows, uh, something like, so then, uh, we can, uh, uh, provide, uh, present those, uh, configuration documentation, uh, some kind of offensively, like, uh, configuration details and, uh, both xml and, uh, yml examples. So, uh, these are the, uh, key updates about, uh, yml support, uh, supporting, uh, phase two. So, and, uh, uh, there are some, uh, uh, configuration, uh, syntax changes as well. So, previously, uh, we can, uh, we could provide environment variables as, uh, as a dictionary, but, uh, uh, in this, uh, uh, phase, uh, we update, uh, uh, environment variable to provide this, uh, array of, uh, QLU pairs, like, uh, showing this documentation, uh, in the picture. And also, uh, timestamp, now we can provide, in, uh, this manner, uh, much, uh, human readable manner. Also, this is always implemented in xml. Uh, yeah. Okay. Uh, if you talk about new CLI, as I mentioned before, they have a few problems, uh, we can't, uh, uh, continue without, uh, new configuration, uh, command line interface. Actually, we can, I don't know, but, uh, having a more structured base, uh, uh, will be really good. So, we, uh, uh, got, uh, come up with, uh, new command line interface. So, uh, if you talk about, uh, new, uh, new updates in phase two, we, uh, observe, uh, redirect, uh, option, and also, uh, we remove test rate command, and, uh, we add, uh, weight, uh, as option, uh, uh, to the, uh, test command, and also, same, uh, we remove the stop rate command, and, uh, we add the weight as option to the stop command, so we can provide those options. If, if those options prove, then, uh, the, uh, it will, uh, behave like a test rate, then, uh, stop weight. Okay. Uh, if you talk about phase three, after this, uh, phase three, I will move into demonstration. Okay. Uh, if you talk about phase three and, uh, phase three will be, uh, much more challenging because, uh, there are a lot of things to complete in phase three. Actually, uh, I have to, uh, in, in our company in support, I have to, uh, uh, finish, uh, completion, validation, uh, on the startup, and, uh, you know, support extensions, as I said. And, uh, when it comes to new CLI, uh, we have to merge it, and, uh, there's a new patch, uh, called version three in, uh, Windows Server Stop and, uh, next turn is, uh, doing a lot of contribution there. And, uh, after, uh, a few discussions, I think we can, uh, continue with the new CLS. Yeah. And, uh, my schema validation and schema, XML schema validation, uh, how to be finished and XML schema validation I have, uh, done some amount of thing and, uh, how to update unit test and, uh, documentation for that test. So, uh, yeah, that's about, uh, my presentation. So, uh, I'll move into my, uh, demonstration now. Okay. Uh, I think you can see my command prompt now. Yes, we can. Oh, okay. Great. Great. Okay. Uh, so, uh, uh, anyway, uh, however, there's no any fancy, uh, user interfaces for my demonstration, you know, uh, everything done in, uh, command line. Okay. Uh, this is, uh, actually, uh, there are no, uh, big, uh, functional difference, uh, difference from, uh, in contrast to phase one in, uh, my demonstration because, uh, in phase one, I, uh, create a POC and, uh, it included, uh, both of these, but, uh, but, uh, there are many updates online, actually. Uh, so, uh, anyway, presentation, uh, be much more like, uh, what I've done in phase one. Okay. Uh, so this is executable, uh, of, uh, Windows Service Trapper that I'm going to run and, uh, the Jenkins.power file and, uh, uh, yeah. So this is the, uh, configuration file that I'm, uh, going to use for Windows Service Trapper in this demonstration. So, okay, you can see the configuration, uh, file, Windows.com file is located in the same, uh, directory where the executable is located and, uh, the names are pretty much same. Okay. Uh, uh, uh, first let's install the, uh, Windows Service Trapper. Uh, so we can use, uh, those install command and it's automatically find the configuration file with the, uh, Windows, uh, sorry, uh, name of the executable. So, yeah, you can see, uh, uh, you see, uh, uh, uh, it's, uh, configured the IDS Jenkins and also it's installed with the ID of Jenkins. So, uh, for, uh, let's, uh, confirm whether it has been installed correctly, uh, in, uh, the service manager. Uh, so, okay, uh, it's here and, uh, but, uh, status is not, uh, running still. So, we have to, uh, start the Windows Service Trapper in order to, uh, bring, uh, uh, the running status. So, let me start, uh, Windows Service Trapper and, uh, yeah, now it's starting and, uh, we can confirm, uh, from here. Uh, yeah, now it's in running status and, uh, we can confirm it by, uh, going to the, uh, local host. Uh, let's see whether Jenkins is running. Yeah, okay, perfect. Jenkins is running on, uh, local host 8081. So, we know it's working, uh, with the ML configuration file. So, you can see the configuration of the environment, uh, variable configurations and, uh, there's no timestamp anyway. Uh, so it has been changed, uh, structurally, uh, in contrast to phase one. So, um, that's how, uh, the, uh, it's working the ML configuration. So, let me, uh, stop the service and, uh, okay, let's see whether it has been stopped. Uh, yeah, it's now not in the running state and, uh, let's confirm it from here. Yeah, perfect. It's, uh, not running anymore. And, uh, let me uninstall the services. Yeah, okay, uh, perfect. Let's refresh. Okay, now, uh, now, uh, now service says, been removed from the, uh, service manager. Okay, uh, that's, uh, the, uh, demonstration of, uh, the ML configuration. So, let me show you how new command line interface works and, uh, okay, first, uh, let's, uh, move into this, uh, directory and, uh, let me close this. Okay, um, uh, there are a lot of configuration files in this directory. I make a few configuration files in order to show the, uh, the feature, uh, which we can, uh, specify the configuration files, uh, uh, the command line interface explicitly. So, uh, this is a configuration file that I'm going to use in, uh, this demonstration. And, uh, first of all, uh, let me, uh, show you, uh, the new features of the new CLI. I show those things in, uh, for this one as well. So, let's go for it. Uh, quick recap. So, there are, uh, a help option, uh, which provides us all the commands which are available and, uh, uh, and, uh, I can show, uh, we can, uh, show, uh, uh, all the options, uh, which are available with, uh, particular commands. As an example, I take, uh, uh, the install command. So, we install and help and we can see all the options are available with the install command. So, uh, now I'm going to use this option, uh, the config file option. And, uh, I can provide the configuration file with this option of the, uh, SW install. I will use the short one and paste the configuration file. Perfect. Now we start with the, uh, I don't like, uh, simple console out in order to identify which type of configuration we are using. Okay. Now I'm just starting Jenkins, uh, confirm with it. Sorry. Uh, it's just, uh, installed here. Okay. Uh, let me start the, um, the, uh, you know, so it's just a, so let's confirm that it is working. Yeah. Perfect. It's working. Uh, so, uh, that's, uh, that way we can specify the command, uh, specify the configuration files from, uh, with, uh, new configuration, uh, new command line interface, uh, using a new command line interface. So, uh, sorry. Uh, sorry. Uh, yeah, you can see, uh, in the previous, uh, command, I forgot to provide this, uh, configuration, uh, file command. So, uh, it's behave like, uh, so when the, uh, when the option is not given, so this, uh, this value will be, uh, automatically skipped and, uh, it will roll back to, uh, XML file configuration because, uh, it's the, uh, uh, base, uh, configuration file. I mean, it's the, uh, base behavior of, uh, basic behavior of, uh, the window size, so I, uh, and the current, uh, according to the current implementation when, uh, we, uh, don't provide the configuration file, it will automatically, uh, roll back to the, uh, XML version. So, now it, uh, find the XML version anyway, uh, I forgot to, uh, because of, I forgot to provide the configuration, uh, extension. Uh, yeah, uh, that's all about the demonstration for my presentation up to now. And, uh, okay, uh, let me move into the presentation again. Uh, so if we talk about face, I think, uh, I think I talked about face, uh, already. Yeah. So that's, uh, what I will help talk about, uh, demonstration and, uh, yeah, uh, it's time for Q&A, so if you have any questions, I'm, uh, free to, uh, answer anything. Thank you, Burika. Are there any questions or comments from the audience? Mm-hmm. Just, uh, thanks a lot for the demo and thanks a lot, uh, for the recent patches. Yeah, we haven't, uh, released, uh, the key change, uh, YAML configuration support yet, though in the current state, it looks like we will be able to do it, uh, early in the next coding phase, hopefully early next week, so that this change becomes available to Windows service rapid users. And, uh, yeah, let's see what is our timeline, but hopefully it will be also available in, uh, Jenkins, uh, in August, so that, uh, people will be able to play these YAML configurations back. Okay. Any additional questions, comments? All right. Well, I just want to say thank you to everybody for nice presentations and Oleg Martin and, uh, for your organizational skills keeping this together and going. Thank you. Thanks for the feedback. Okay. Thanks everyone, uh, for this demo session. Uh, we will publish the video within a few hours and yeah, looking forward to meet your, the final, uh, demos in one month. We will be doing them as Jenkins online meetups, so, uh, there will be a lot more participants. Yeah, it will be an interesting experience. I believe that, uh, all projects are ready to present, so looking forward to that. Thanks all. All right. Thanks for those concluding remarks, Oleg. Bye. Bye. Goodbye.