 Okay, hello and welcome everyone to the Jenkins Google Summer of Code Year 2020. This is the Coding Phase 1 demo, Part 2. We had Part 1 earlier today, which you can find on our YouTube channel once we publish it. Yes, this year, being a challenging year, we have come together and we participate in the great movement called Open Source. The Jenkins community is mentoring students under the Google Summer of Code program. Right, so we're now in Part 2 of the student presentations, so I'll give a brief introduction to Jenkins in Google Summer of Code or as we shorten it, JSOC. Then we'll have our project demos by students followed by questions and answers. Which JSOC organization are we? Here are the ones on the left, pointed to by the arrow. We are operating the Jenkins and the Jenkins X Summer of Code project under this banner. And Jenkins is part of a greater organization called the Continuous Delivery Foundation and that organization runs other Summer of Code projects. Please visit their websites for more. The Jenkins community is in its fourth year of participating in the Summer of Code program. This year we have 20 project ideas and we've been able to accept proposals from 7 students. As a reminder, our capacity to accept student projects depends greatly on how many mentors we can recruit and this year we are very fortunate to have with us an average of 2 to 4 mentors per project. As mentioned before, we have projects for both the Jenkins open source project and the Jenkins X open source project. Jenkins X is not the same as Jenkins, but the explanation between the two is for a later time. To learn more about how we operate the program, please visit our main page under Jenkins.io slash projects slash jsoc. You can reach us through our different channels. So we have a mailing list under Google group. We have a Gitter chat under Gitter.im slash Jenkins CI slash jsoc-sig and the dash sig stands for special interest group. We hold regular office hours on Wednesdays online or as video chat has needed. We have project specific channels, which you can find by visiting our Jenkins website. We have links on each project page to those specific channels and the Jenkins X operates the communication using Slack. Okay, Q&A during this presentation you can use the Zoom chat. You can also ask your questions on Gitter. After the presentations, if you have further questions or want clarifications, please don't hesitate to reach out to us on Gitter or on our mailing list. We also have a code of conduct that we're updating pretty soon. Essentially we just want to be nice to one another and that's what we are codifying in our code of conduct. If you want to see these slides after this presentation, here's a short URL at the bottom here where you can find these slides. So before we get started, I would like to thank our formidable students for the work that they're doing on their respective projects. I want to thank our dedicated mentors who are assisting students with their projects and I want to thank our org admins who are making things possible behind the scenes. Earlier today we had part one demos, so now we're going to have part two demos. The part one demos were the following and the part two demos are the machine learning plugins for data science. It will be followed by a presentation for the Jenkins Windows Services YAML configuration support and lastly our last demo today is going to be external fingerprint storage. So before we start, would anyone like to add something through the introduction? Hi, this is Markey. I would just like to congratulate all of the students, all of the mentors and the org admins for yet another great Google summer of code here and I'm very excited to see what these crop of students have done. It is very exciting indeed. Anyone else? Sorry, I didn't get that. Just post one. Yeah, we have already delivered a lot of stuff. Many projects have previews for Jenkins users. Yeah, I'm really looking forward to all these features to be delivered and I'm proud to see all the projects on the public. Thank you Markey and Oleg for your comments. All right, so I want to make a quick comment just to thank Martin Oleg for coordinating this whole program. I know it's a huge amount of work and just sitting on the sidelines here and getting the emails and all the organizational stuff that you guys are doing. Doing a great job. Thank you so much. Looking forward to seeing what you guys are doing and I'm very excited for doing a great job. Thank you so much. Looking forward to the presentation. Thank you. We invested a lot in automating and documenting Jenkins. So maybe in a couple of years we will be able to replace ourselves with Jenkins and a few pipelines for sending emails. All right. Okay, so now I would like to invite Logie to present coding phase one of the project machine learning plugins for data science. I will stop the share so that you can start your share. Yeah. Thank you Martin. Yeah, awesome. I'm gonna share my screen right now. Is that visible to you? Yes. Yeah. Thank you. Welcome to my presentation on machine learning plugin for the data science. So a quick introduction to myself. I was selected for GSOC 2020 with Jenkins. I'm doing my major in computer science and engineering from Sri Lanka. So next we move on to the presentation of coding phase one. So here we are, we are addressing a problem with common data science discipline in machine learning field. So this can be related to a real world story. When I was working in my previous internship, I had a chance to work with Jupyter Notebook with Postgres SQL for an NLP machine learning project. So in that project, the Jupyter Notebook creates Postgres SQL to database to store all process data. And every single data processing will be reflected in the database. So I need to, so every time I had to check the data is up to date manually while I try to build the model using my Python code in the Jupyter Notebook. So this is even worse when this happened in the production line when we are creating a machine learning model for in the industry. So these inconveniences could be resolved efficiently using CDCI. So here what we are saying is the lone interactive notebooks are not capable for building a production level machine learning model. But they are very excellent in both data analyzing and coding at the same time. You know that we can visualize interactively from the Jupyter Notebook. Jupyter Notebook is giving a great support for machine learning in this software world. So we cannot simply ignore notebook to build our models. So our goal is to automate these challenges in machine learning, in machine learning workflows from end to end. So in this slide here, it is a simple way of using CDCI principle to apply to machine learning problem. This can give a sort of insight where we are here with this our plug-in. So first of all, if you take a production line, first data engineers are the responsible persons for the data processing. Then the data scientist will build a high accuracy models using processing the data and the code. So they have to run iteratively to build high accuracy models. So using this model ML engineers and software engineers will do the rest of deployment works as usual in the software development industry. So this is a simple way of explaining how CDCA can be applicable in machine learning production environment. So why we are using the Jenkins to automate these changes, these challenges. One of the reason is there are lots of plug-in have been developed and maintained that can be very useful for automating machine learning workflow in the production. For example, if you want to push one of one ML model to a S3 AWS S3 storage, there's a S3 publisher for that. So likewise, there's a lot of plugins can be integrated with Jenkins. So we don't need to do a scratch work from bottom to up to to satisfy these, these workflows. So in the next slide, this slide after I have selected for GSOC during the community bonding period, we have spent a little time to name our plug-in and design the high level architecture that that gave good insight to mentors to guide me. Later we created repository and we prepared for the coding phase funds and a lot of interaction happens in the community bonding. So, so far we are done with these features in the phase one coding. The first one is configuring, configuring the connection between I Python kernel and Jenkins instance. In the next user will be able to copy their notebooks to the workspace in Jenkins. If they want to convert the Jupyter notebook into Python files and JSON files, JSON files which can be used to run the notebook by cell by cell. That will be very useful when we are running the code. We can understand what's happening in the code and we can easily get the knowledge of code. So the next feature is we can build Jupyter notebooks, Python or JSON. So these are the features we have done with the coding phase one. So next one is demo. Before going demo, I will give us short description about what I'm going to do in the demo. So, first I'm going to configuring the local I Python server in my local machine. And then I'm adding Jupyter notebooks. Then I'm going to build a model with the diabetics data sets with the logistic regression is a simple linear model. We can use it very simply. There are maybe 20 lines of code we can build a model. So for the demo purpose, I have created that. Then we can use another notebook prediction score. We can use it to predict how the model predict the model accuracy. So the accuracy means how many patients are classified who are data diabetes or not. So we will move to the demo. So, first, I'm going to configure my server. So here. Let me, let me interrupt you, we still see the slide of the demo with the different bullets. Maybe you want to change what you're sharing. Yeah. Okay. Yeah. Is that okay. Now we can see a low heat. Yeah, thank you. Thank you, Marty. Yep. Yeah, I can configure a new server here. So you can add a name like it could be it should be alphanumeric and it can contain only underscore like I can set a local server. So the next one is you have to add the IP address. You cannot give any more from the IP address so the validation will save it will say that it's a more fun. So we will do a simple local host or maybe you can add as a local host to the server. So the launching timeout is about the how long it will be take to launch the Python kernel in the server. The next one is the results is how many lines you can get you can get you can get from the results. So sometimes if you, if you, if you know about pandas in the machine learning, it will if you print the you can print your whole data sets. You can see so if you add three, you can only see the three, three rows of data. So maybe I can add something so in this next I will test this connection. So it's creating. Okay, the connection is successful because it is in my machine so it is very speed. So I'm going to save my configurations. So yeah, we're done with the global configurations. So now we are going to create a job freestyle job freestyle job. Here we go. So, in this case, you can, you know, these are the descriptions panel, and you can select any servers you configured in this global configurations. So it will show every service you can pick up the global configuration. So, for this demo, I would like to add a data data sets to this machine learning machine learning demo. So I'm going to use a file parameter. So I'm going to use the name as diabetes diabetes.csvcfc is a famous format for data sets. So in the next build environment, I would like to add my notebooks in my local system. So I'm going to give my absolute path for this for this files demo. So I have my notebooks in my computer model. So I'm going to add my next just model. So if one user want to convert this files, these notebooks to a JSON or Python, so they can easily easily use this checkbox. If they check this, it will show a simple menu to convert these files to a JSON or Python. So in this demo, we can do both of them, but we will choose JSON. So he can also name it to as a different different name like train.json. So in the next step, he has to use this work this file path to run this, this, this notebook. So we will let this file as it is. And in case if you get error in Python codes. So you have to view is in a rich formative view. So you can use an anti color plugin that can be very useful when you are seeing the console in a very rich, very rich formative text. So I'm going to use one of these. So next to the build step is one of the important this project. So we are created a builder. So we can, we can give the name here to train the JSON for one of this. So just like text passer, you can directly add your code here in this text area. So it will also run the code from this from the iPad internal. So for this demo, we will add a train.json. And we will add another name for that test model test. Yeah, here we set up with this config job configurations. So we're going to save this. So, when we are running with this job, we already have added a parameter so we have to add the data set to the workspace. So here I'm adding the data diabetes CSV so it will, it will reflect in the workspace in the later. So we're going to build a plugin. So here, you can see here it run the course by cell by cell. So here it saved the model here, and the second notebook will get the model and give the results and the accuracy of this accuracy of this model. Yep, that's, that's all about the demo. So we'll move to the presentation back. Yep. So that's all for the demo. And yep. So, there are exist, there are some exciting features will be implemented in the future. We are currently exploring to connect to existing Python kernel from Jenkins and we will add code editor for the for edit for editing notebooks and Python files in the code base, coding, coding phase two. And you can find more information about our design, our design in the design document and machine learning project in Jenkins.io. So, yeah. You can find some helpful resources, you can find my Github repo that will have some very detailed with me you can follow that in the Github repo. So these are the some resources. Yep. Yep, that's all my presentation and finally thank you to everyone for joining in my presentation. And thank you for this opportunity to work with, with this project with my mentors and all that means. Thank you for special thanks for Markey, Anis, Shiva and Bruno. And also other guide means like, like, you gave great support. Yeah, thank you. Thank you, Lohi. I would like to, I would like to invite the mentors to ask questions or comments. I would like to give a comment first and foremost to Lohi. Lohi, you make this extremely easy. You are an extremely talented and bright individual. I am so happy that you are a student for this project. And I know I've said this before but this particular project has so what so much wide reaching implications, not only for machine learning and data science but but in the medical field and the imaging there's so many things that can be used now because of what you're doing and I hope you understand the awesomeness of that. I would also like to thank the other mentors, our lead mentor Bruno who can't be with us today because of the time difference. It's super early in the morning for him. But Bruno, especially Iones, Shiva, thank you for all that you do on this project. That was all for me. Thank you Markey and Lohi. Thank you as well. That was a very good presentation and I can certainly reiterate many of the things that Markey said about the development of this project. I'm particularly excited about this because as Markey said he has applications to life sciences and I don't know how many of you remember but a few years back I managed to get a name just for that. For Jenkins, we have now an open source project called Jenkins for Life Science Continuous Integration and I'm certainly hoping that this plugin will be a big component of that as well. So, great, thank you. Thank you Markey. Thank you very much. So, I mean Lohi has done a very good job so far and again as Markey has already said that the prospect of this plugin is really useful for a lot of the different machine learning workflows that people are having because the more we are moving towards a more digital age, we are seeing like data science being involved in multiple sectors and having this kind of automated workflow will definitely help to actually move more and more machine learning models and kind of studies to a production environment. So, I mean Lohi has been quite brilliant with his work, FX as well and I mean the logic study has applied so far within the plugin and it has been a treat to work with the other mentors and be part of this project. Thank you. Thank you Shui for your compliment. So, do we have some time left for questions? I think we do. Yes. Okay. So, yeah, I have one technical question. So in your presentation you have presented how to use the plugin in these freestyle projects. Do you actually plan to support Jenkins pipeline in your project? I was presented to in the last meeting but mentors preferred that you can do a freestyle project that will be very detailed to audience, yeah. But technically it supports pipeline now, right? Yeah. All right. And the another question is how to try your project out? So, how to get it installed and how to get it fine? Yeah. So, the project is, now we have published the alpha release. So, if you want to download or if you want to use this plugin, you can use the experimental update center. So, that would be very easy to download your plugin in your Jenkins workspace. Yeah. Thank you. Thank you. Do we have other questions? Okay. So, let's move on to the next presentation, which is the Jenkins window services YAML configuration support. And this will be presented by Pudica. Pudica, I will now stop my share and you can share your screen. Yeah. Okay. Thank you, Martin. I think you guys should see my screen now. We can see your screen. Could you check your microphone volume, see if you can increase it a little bit? Yeah. Hello, can you hear me now? Yes, much better. Thank you. Okay. Okay. Thank you very much. Okay. So, welcome to my project presentation. So, what I'm going to do in my project is under the GSOC 2020, I'm going to do YAML configuration support for Jenkins windows server. So, okay. During the presentation, I will go through these topics. First, I will introduce myself and then we will talk about the server and also current configuration server cell and YAML configuration support and then we will talk about phase one updates what I have done so far. Okay. And there will be a demonstration and QNNation assets. Okay. So, I am from Sri Lanka and I am finally under the unit of University of Morotware and Faculty of IT. Yes. This is my first time in Google Summer of Code. Awesome experience and I have a little bit of experience in web development actually with Angular and C sharp. So, basically I wanted to move into computer science things. So, that's why I select this project, which have not much HTML things, you know. Okay. So, okay. When it comes to Windows server, you know, we can run Jenkins server and client in Windows machine as Windows service, which will provide more robotness. So, and actually those that features also bundled into the Jenkins core as well. So, currently, you know, when we are deploying Windows service, we need to feed a lot of configurations. So, currently, those configurations are free to Windows service wrapper by an XML file. So, you can find the project in the given link. So, okay. Let's talk about configurations a little bit. So, as I mentioned before, the configurations are configured from XML file and the XML file should be in the same directory where the executable plays. Then the XML files name should be the XML files name should be same to the executable file names and also a user can't specify the XML file at the file path from command from separately and there are no XML schema validations and there are limited configuration checks as well. So, if you are interested to find some sample configurations file, definitely you can find sample configurations file, which have minimum configurations and all the configurations as two files from the human link. Okay, so now we are looking at sample XML file. So, you can see it's much not verbose and not human friendly. And, you know, it's still difficult for newbie to edit those things. And so, what we are going to do is we are going to provide those configurations as a YAML file. So, that's what I'm going, that's the solution we are going to present in the project. Okay, so, what we know into YAML. So, YAML is less verbose and much more human readable than XML and definitely it's a lightweight than XML adjacent because they are producing extra delimiters. And also the YAML is becoming more popular among configuration management tools like build tools. So, that's the reason we are moving into YAML as a configuration file. So, now we are looking at sample YAML configuration file. So, obviously we can see it's much readable and human friendly. Anyone can edit this and use this as it. So, this is a kind of comparison between those two files. Obviously you can see YAML, YAML thing is much readable. So, it's really easy to handle anyone, even without good programming experience. I mean, yeah, YAML experience is needed but yeah, it's still readable. Okay, so, this is my project scope that I am going to do during Google Summer of Code in 2020. So, obviously I have done the YAML configuration support my project and also YAML schema validation will be added and new CLI will be talking about these things in later slides and also XML schema validation. Okay, this is how my timeline is structured now but I am not going to talk about it more. However, I am happy I am on the time. Okay, let's come to phase one updates and there are a few updates which are new CLI and YAML support and schema validation which are not really listed but definitely you can find those pull requests in given links and W project structure which is published and with the help of Oleg, thank you so much. So, if we talk about new CLI, as I mentioned before, we can use a kind of specify the XML file from externally in command line but in any phases we are going to keep the XML support as well. So, definitely you use a need some, we should allow user to specify the configuration file separately. So, actually CLI I think was not in my plan but definitely to move in this project we need this. So, also CLI command was something like that we can specify the executable name and then redirect where Oleg should be redirect and then the redirect path and we can elevate the command from class cell and then we can specify the command. So, it's kind of only commands manner we can't specify any options here if I mean user want to specify things it's not kind of structured in new CLI what we are going to do is when it's kind of commands and options manner like here's the executable and the user can mention the command and then he can specify the options for this like he can use this C or the config file option to specify the configuration file and then he can use this command to elevate the command prompt and he can use this configuration, sorry, option to specify the redirect path where Oleg should be redirect. So, there are these options in short term and long manner as well. So, okay, so I think I described these things and and I use a command line library to passing those command line arguments and I chose about 2.2k a starts I think it's a really good library and so you can find my poor request in the given link. And then, okay, when it comes to ML configuration support as I mentioned before, the configuration will be delivered as a ML file and in this case, this configuration will be provided in more structured way. The next thing and I use the ML dot net library to DC realize the ML file into an object drop so that's a really good library and in previous library I had some compatibility issue with because it was not support. It was not support for.net 4.0 upwards but later window size report also obsolete the support for windows, sorry.net 2.0 so it won't be a problem at all. And yeah, when it comes to external schema validation, there wasn't a schema validation for XML before so I added XML schema validation and so user can use that schema file in order to create their XML configuration file. And access defile will be shipped as a embedded resource so in I mentioned there that I'm going to do. Okay, I mentioned I will add. YAML configuration support as well in phase two, hopefully, and the my plan is kind of planning is used to JSON schema to validate my file essay. So, okay, those are the things that I have to mention about my project I think it's clear so now I can move into my demonstration. And I think you can see my screen. Come on. Yes, we can see your terminal. Okay, thank you. Okay, so here's my Windows API executable, I will use this and the Jenkins dot file, which will run Jenkins. And in this presentation I'm going to use this conflict underscore all underscore new dot.tml file in order to provide the configurations between those. Okay. Let me show my configuration file as well. So, okay, this is my configuration file. So you can see the IDs Jenkins and those basic configurations things are here and this is the same XML file for that. And, okay, now I'm going to use this HTML file in order to create this Windows API stripper. Okay, first, I will copy the file part of this conclusion file because I mentioned that now user can specify the file part. So, that I will introduce about my new CLI a little bit. So in previous Windows Stripper command line, we can do something like that and then Part will be there and we can do the command. So, but in CLI, what we are going to do is now we have. So, okay, before going to that demonstration, so I will show what are the commands available on this. So easily you can use help command in order to see those all the commands available here and also you can use This help option in order to check the options which are available with these command. Okay, let me show you. Okay, install and This will show you all the options which are available with this particular install command. Okay. Okay, now let me move into this demonstration. First time going what I'm going to do is I'm going to install Windows service wrapper with that configuration file. And I can specify it in this manner. Okay, now Windows service wrapper, the service is installed. Let us check whether it has installed correctly. Okay, now The ID and caption knows in SW demo. Okay, let us check. Let us refresh this before. Okay. Yeah, it should be there. And it's difficult to find all the time. Search and service manager is still quite complicated. So, yeah, I think we'll let me refresh it again and see whether it is here. Maybe it actually wasn't installed due to whatever reason. But it's shown. Okay. Let's try it again. Okay, I'll use a shorter command in this time. Yeah, but I think that already exists. So, that's a good question. Maybe try refreshing for the game. So the under extended rather than standard. Oh, sorry. You have two tabs at the bottom one says standard and one says extended services. Is it possible under under the extended. And the name should be Jenkins right because he The ID name is Jenkins. I definitely sorry. Oh my God. Yeah, yeah, yeah, it's here. And yeah, I was finding in the caption. Yeah. Yeah, it's here and status is not running. Thank you so much. Okay, now it says installed and what I'm going to do is start Jenkins with this configuration file. Okay, then you can use some configuration file for that. Okay, it's starting. And you check whether it's changing. Yeah, now it's running. Okay, let's check the browser. Yeah, I think it's okay. Yeah, it's fine. So, you can start it as a window service now. So what I'm going to do now is I'm going to stop this. Jenkins server. And I use the same configuration file. Okay, now it should be stopped by now. Yeah. It's fine. Okay. Finally, I will install this. Okay, so let me show some invalid commands so invalid commands will not work and show here and also options. So, yeah, so if, as I mentioned before, we can at the, at the moment, we are providing support XML and NML both. So if you want to boot Windows server with XML file, then it's totally okay. We can do it XML file as well. And if we don't have an XML file and NML file both then it will basically go to find the same XML file with the same name of executable file in the directory and okay. Let me check. I think there was something. Yeah, there's XML file. So let me just install this. Yeah, Jenkins is already there. So let me delete. And yeah, now it will come to file is not spread right now. It will start with XML file. The same with the XML file which have the same name of executable. So yeah, that's my demonstration up to now. And so I hope that I have implemented the XML schema validation with XSD so you can find that full request. Yes. So this is the particular XML file that I created. So you can use this XSD file in order to create the XML file you can use this XSD schema to create the particular XML configuration file. Yeah, okay. That's my demonstration. So let me go to my presentation back. Okay. Yeah. Yeah, that's all about my demonstration. So please guess any correction now when you can ask anything. Yeah. Any questions for Brica question to the audience. Who does use Windows here. Sorry. Pick me pick me pick me. I do use Windows. This is Yanis. Quite extensively. And I never actually run Jenkins as a service unfortunately because I need access to some local paths and other things and I don't think services allow that so I'll usually run it as a scheduled task. But it's still services. The most recommended way to do that for community tabs because provides a lot of ability provides a built-in fill over and other features. Which else supported by Windows Service Rapper and now which also supported by the configuration. So, yeah, yeah, and by default Jenkins installs agents and Jenkins server as Windows services. So this project provides a lot of value for such setups, especially when it comes to configuration management, because it's also a thing for Windows and having PML support unlocks a lot of things, which are not possible. The current configuration management tools for XML. Yes, and I think that it's a really useful project for those who use Windows and according to our statistics, a lot of Jinx users run on Windows. I'm telling you, it's a lot to Boudicca for working on that because we've already got a lot of great features and I'm looking forward to see them released and to become available to all Windows Service Rapper users. Whether they use Jenkins or use other services because Windows Service Rapper has millions of users and Jenkins is just one of the various ways used. Yeah. Thank you, Oleg. Thank you for the description. So I think that's all. So I want to give a huge thank you for my mentors, Oleg, Mike and next turn. You did a great job to make the project success and thank you, Oleg, so much. You were helping me when you are in the traveling. So as I mentioned before, I was not going to computer science to mentors help me a lot in a lot of things. So thank you so much and thank you. That means it's a great opportunity to work with your genius minds and awesome people. So thank you so much. All right. Thank you. Could you please release the screen share so that we can move on? Yeah. While Mike, would you like to add something? You are muted, Mike, if you are talking. That's fine. Okay. So let's move on. All right. Oh, one comment in the chat. So Mike says that his microphone is not working and it will not unmute. So if you've got comments, please share them via the common normal communication channels for the for your for your for your project. All right. So our third presentation today is the external external fingerprint storage by submit. So submit I will stop the share and you can grab the screen. I'm smart. Just start the screen share. Can you screen message? Can you see my screen? Yes. Awesome. So, hi everybody. Thank you for joining us for the external fingerprint storage presentation, which is one of the Jenkins GSOM project this year. So without much further ado, I'll start. So this is our agenda for today's presentation. I'll start with a short personal introduction. I'm Sumit Sareen. So I'm the student for this project and I'm going to be pursuing a bachelor's in instrumentation and control engineering from NSID Delhi. I started contributing big Jenkins in December 2019. I made some small contributions to the fingerprints engine. And that's how, you know, today, you know, so it eventually led me to taking this project over and I really love it. So, and thank just thanks for everybody or the all admins mentors. So for this project, Oleg, Mike, Andre helping me out. So that's our project. So I'll first start talking about what are fingerprints actually, right? So file fingerprinting inside Jenkins is just a way for dependency tracking, right? So say you have artifacts, you have files that you want to, you know, basically track across jobs. Fingerprinting engine is what basically allows you to do that. I just, so like a small example, say you have a team A, which builds, you know, an artifact, a door jar, and there's a team B that works on the door jar, which uses a door jar. So now you might have that someday, you know, be reports that, you know, we have, we are having some problems with a door jar, and you know, please fix that. So now you want to know that, you know, which version of a door jar are they actually using, right, to fix that problem. So that's how the fingerprinting engine comes in. It tells you that, you know, they're on this version and how, how basically, you know, which version you have to fix. So I'll just show a small live example of this fingerprinting engine, right? So I have configured here, basically using an instance, and I have two jobs here, right? Just like explained, job A and job B. So, yeah, so as you can see, what, what job A does is basically, yeah, so it creates an artifact A.txt, it archives that artifact, and it's, it's recording those fingerprints, which it gets from A.txt, right? And what the job B does basically is that it copies this A.txt artifact from the job A, right? And it just, it's also fingerprinting enabled, right? So now if I go back, I can, you know, start a build for A, right? And then, so if I go to this build A, right? I can see that here, I actually see fingerprints, right? And I can see that this A.txt fingerprint was actually the original owner is this build, right? And if I go click there, I can see that it was used, where was it used in producing job A's, build number four, right? Simple. Now, if I go start a build for job B, right? What I can see is I can go inside this build and see the fingerprints. I can see that this A.txt's original owner is A, is build four, right? So I can see that what are the usages where this particular artifact was used, right? Start as a simple example of the fingerprinting engine behind Jenkins, right? Now, so yeah, I showed that fingerprint UI in Jenkins, right? So I'll just skip this over. So, so then we come to the problem, right? What's the problem? So the current fingerprint storage engine, it's saving these fingerprints in XML files inside the storage of, inside the local disk storage of Jenkins, right? So now this is a problem because, you know, you can't configure P as you use cloud storages, you're dependent on the local disk storage. You know, you can't create replica sets that might allow you better reliability and availability back to management as harder. And plus, since these fingerprints are stored locally, you can track them across Jenkins instances, right? So solve all these problems. And just to, you know, show you, you can see the screen also, right? The code editor. Yes, we can see the code, yes. Awesome. So just now I showed you an example, right? So I'll just show you that in the work directory, I have this is what this is the fingerprint that was actually created. It was AS build four, B's build four. So this is actually the example find that, you know, runs behind the scenes. And I'll just stop this instance. Right. So that's the problem we face. So now what's the solution? So we are working towards building a pluggable storage so that basically plug in, we can, you know, provide an API inside Jenkins code, which plugins can build upon. And then, you know, so somebody can, you know, build a MongoDB plugin, a MySQL plugin, they can just come in. And, you know, these fingerprints can be stored inside these external storages. So that is, you know, the goal of our project and this the entire story of, you know, making this pluggable architecture is a common is something common in Jenkins as we move towards the cloud native Jenkins. And you can see these stories inside the cloud native sync. So there are stories around externalizing log storages, externalizing artifacts, and so on and so forth. Right. So then, with this project, what are achievements still now in phase one. So, so this API was released in Jenkins 2.242. You can see in the change log. So basically in 2.242, we have this API, we introduce methods and, you know, basically developers can build this and it has 73. Good, good build. So I hope I didn't break anything. That's good. So that's, that's our API inside Jenkins code. And then we are building a reference implementation around it. And basically this reference implementation is backed by Redis. So this is our repository, the Redis fingerprint storage plugin, you know, go and give it, you know, just try it out, give us a feedback that would be awesome. Installation and configuring the plugin everything is there in the redmi. So that would be awesome. That's what we achieved. And so I'll now move on to the, you know, and this, the plugin is released as 0.1 alpha one. So you can download it from the experimental updates. Right. So I'll move on to the demo now. Let me just turn bigger. instance. I guess it should be just a few more seconds. Everything takes longer when you run it with zoom. That's true. Yes. So, yeah, so we have an instance. The thing about this instance and the earlier defenses earlier as I showed. So now I should have a, you know, I'll show you that plugin installed. So I go to manage plugins and see you in seconds. Next up. Oh, sorry, install. Sorry. So, yeah, so I've read this thing up and so it's installed 0.1 alpha one. Right. So I'll just go to manage. So let's go to configure system. That's how you can configure your instance. So, you know, we have this tab. You can specify most for if there's an SSL connection that's configured on the on the connection. So this uses a integer index databases so you can, you know, specify a database number, this connection timeouts of a timeout that you can give and, you know, if there's a credential involved, you can just add a credential. Right. So, and plus, if you do the test it is which will fail right now. Yeah, because I don't have a distance configured. And I'll just do that. Right. So, I'll just spin up a server. And I'll also spin up a command name. This server. So I now have a server running at port number 6379. So now if I do a test it is success. And now I'll just apply this and I'll just see awesome. Now I'll start a new job. Patient project. Okay. And I'll add a build step. So I'll just create, you know, something that this job will create 161 demo.txt file. And I'll add a post build action that is a record fingerprints. So I'll record demo.txt. Just check the code demo. So I'll just apply. So now, once I hit a build, I hope it does not fail. So, and I go to this build, right, I can see the fingerprints. I can see that it's recording demo.txt. And, you know, we have a, it's, it's, we found it in build number one. So interestingly, now if I go here, you'll see that in this work directory, I don't have any fingerprints folder. Because these fingerprints now went to the redis instance. And how can we verify that? So yeah, so this particular key is for this particular fingerprint. And now I have that exact same fingerprint information stored inside redis. So that's pretty much it about further demo. And go back to the slides. Yeah, so that is the demo. So what's next. We plan to extend the API, you know, more methods. So we need to, you know, we need to extend this API to implement tracing across instances, that's something for the next phases. So there's fingerprint cleanup. So currently, in the local instances of the in the local XML based storage, what happens is that those fingerprints which whose builds are no longer present on the system are cleaned up on a periodic basis. But so we need to, you know, have this functionality for our external storage is also migration. So currently, you know, if a user installs this and has, you know, already present fingerprints inside the local instance, they won't get transferred at the moment. So that is something you're going to work on. So the listener is something it's a it's a it's a basically it triggers something around it basically triggered itself when some changes happen. And you know, that is something we might want to, you know, do as a next step to support virtual files or, you know, so that might need a reverb and tracing as explained across, you know, tracking these fingerprints across instances. And before the Q&A, I have these links at the end of my slide. So, you know, that would be awesome if you just, you know, give this plug in a short, let us know if any issues come up and there's a better channel also link. So you can find me there always and I'll be happy to help. So I'll just open the floor up to Q&A. Thanks a lot everybody for having me. All right, thank you questions regarding this project. I know I have a question. No one has takes the floor. Okay, my question is, when you store the fingerprint in the database, is there links back to the instances that consume the fingerprint? So by instances, are you referring to the particular Jenkins instance, which created that fingerprint? Yes, to the one that created the fingerprint, but also to the other Jenkins instances, which may consume that fingerprint. Right, so we have, so what we do is basically because these fingerprints are IDed by MD5 hashes. So we have to ensure that, you know, an instance ID is also associated with them. So to maintain all the functionality, yes, we do have an attached instance ID whenever we save it in the Redis instance. But the API does not enforce anything. So the API is built such that it's up to the plugin developers to decide how they decide to store the fingerprints. But as far as our reference implementation of Redis goes, yes, we do store it. Okay, I was asking in the context of cleaning up the fingerprints. So if they are consumed on multiple Jenkins instances, it's, if you have two Jenkins instances consuming fingerprints, then you cannot run the cleaner on one without consulting the other Jenkins to see if they, if it has references to the fingerprints. That's the context of my question. Something to think about, I guess. No, I got your question. So that's not something that will happen because we saw basically there's a, you can think of it like as a barrier. The fingerprints are pretty much isolated on an instance level. When we talk about tracing, we have not built tracing yet. So that might come in the form of a separate plugin. As far as our current implementation goes, if, if say fingerprint in Jenkins instance, one is cleaning up fingerprints, it will only clean its own fingerprints. It won't touch the fingerprints of other instance. So they are isolated in a sense. Okay, that's clear. Thank you. Any other questions or comments from the mentors for this project. Oleg, Andre, Michael. Yeah, I would just like to thank Sumit for the hard work on this project because externalizing fingerprints is one of the items required for providing full plugable storage in the Jenkins project. It's really important for future architectures for running Jenkins in the cloud, especially in public clouds. And this project helps us to move towards this capability in Jenkins. Also, I would like to thank Sumit for contributing to the Jenkins core because this project includes a lot of complexity because we are operating basically in this low level code base of the Jenkins core. So there is a lot of various aspects like compatibility, like performance and also routine APIs and make this API efficient for existing these cases without breaking binary compatibility. So it was able to study this part of the code base and to quickly start contributing to that. Moreover, we have Jenkins enhancement proposal, which documents the specification for external fingerprints storage. And I believe that it's really great progress and I'm looking forward to see what we will achieve during the next phases. So thanks a lot for your work on this project. Thanks Oleg and the same, thanks to you all on the mentors also for having done this without your help and guidance. Thank you. I just wanted to comment. I mean, you know, when Sumit had raised the point about it being part of the cloud native, so I guess that is in itself, you know, very big step that, you know, it's today becoming of real importance. We actually become part of the cloud native part. So I mean, yeah, I really loved the entire idea of the, of the plugin. Thanks and if you are interested in, you know, cloud native stories, so you can go ahead to this actually. Oh, I did provide a link somewhere. Yes, so there are a lot of the pluggable storages, other stories also in this cloud native scene. So welcome you there also. Nice to thank you. All right, any other question regarding this project. Okay, let's conclude the session today. Thank you for releasing the share. So here we are. And so this was our last presentation today. So this was part two of the project demos. If you're looking for more resources on the Jenkins Google Summer of Code website, we have the link here. There are recordings about the JSOC meetings on our YouTube channel. And you can also visit our blogs, the tag for the JSOC blogs are JSOC is JSOC actually. And these slides here's the super long link to these slides. And it's, it's truly wonderful to see that people are enthusiastic about contributing to Jenkins during the Summer of Code program. We have other programs that Jenkins, the Jenkins community participates in. So please visit our website for more on that. So on this, I want to thank again all our students and our mentors for their great work and for your participation in this open source project. And I wish you all the best for coding phase two. All right, and the link to these slides. Here's the short URL to these slides if you need to see them offline. And on this. Thank you very much and have a great rest of the day everyone. Thank you also and thank you to our students. Wonderful. Thanks all. And yeah, thanks to Mark and Martin for hosting the JSOC demos. It's much appreciated. And thanks to everyone who contributed to the project so that you are a student mentor or just a contributor interested in these stories. It's an effort which includes a dozens of contributors and it's much appreciated. Awesome. I am going to stop the recording.