 Hello, it looks like I've joined from the wrong account so I'm going to drop off and join again from the correct account so that I can turn on the recording you right back. That's better. Now I am here and I can rename myself. And I now have permission to switch the recording on. Very good. And I should. Just to see. Okay, checking my audio. Hello Sharon welcome. Thank you. What did I do with our notes document. That's completely strange. I don't know what I did with our notes document. Have I not been taking notes while we've met together. I've got a folder. Okay, well I like to start on time. So let's, I'm going to turn. Oh, and it's already recording that's even better. Great. So we're recording and thank you for being with us. We intentionally don't enable video because that way you can join from low band lower bandwidth connections if that helps. The recording will be posted after we're done. Thanks very much. So, I guess the first opening is, are there questions that you have that you'd like to ask or things where Kristen or I could be of help. Yeah, so go ahead, Cynthia, your question would be great. So my question is, was different in the Jenkins and other plugins. Because I, when I was trying to work on it on the, I couldn't see like a, they, they, they felt to use so I can upload it in like the, I can upload it locally. So, yeah, I'm just curious to know the difference between the Jenkins core and plugins. Okay, so, so let me, I'm going to try to say back to you what I think your question is you can then correct me if I'm wrong on what the question is. So your question is, what's the distinction between a Jenkins plugin where in order to see changes to the plugin you upload the HPI file into Jenkins and look at it, or your work in Jenkins core and by the way you just submitted a pull request to Jenkins core well done that has a proposed example in that pull request but you don't use an HPI file to work with Jenkins core is that did I get your question correct. So Cynthia, you may still be muted. Did I restate your question correctly Cynthia that you're trying to understand the difference between Jenkins core and a plugin and the development environment experience that you had. Yeah, yeah, yeah. So you had some connection issues. Yeah, that's the question. Okay, great. So, so the distinction there is that Jenkins core as a single monolithic Java application. When you need to make changes to Jenkins core. It's right inside the Jenkins core and then it has to be recompiled or, or reloaded there are actually ways to do the same same style of interaction with Jenkins course you do with plugins it actually could be a little easier. It's uncommon that you need to make a change in Jenkins core so the maven, and I believe in that case it's called jetty colon run command will let you run Jenkins, and then it will automatically reload for you from changes you make on the file system. So there is a distinction and, and it looks like you handle the distinction well enough to be able to submit the document, a proposed improvement for an example to Jenkins core. Now I haven't reviewed it yet and I'll review that later today probably in the next two or three hours and give feedback on it. Jenkins core has a pretty well defined way of handling pull requests. It is that we need to approvers, and we need after two approvers have given yes it's okay. We put a marker up that says, this is ready for merge and in 24 hours. Do the merge. So Esther I went ahead and muted you we had no sound from the background that sound like automobiles. Kristen, I believe is also one who's eligible to approve proposed changes to Jenkins core. And so it may be that we have enough approvals even to merge yours before the start of Monday's working day. Was there, did you have additional questions related to that or, or things that you found perplexing I was really pleased I wasn't expecting any of any of you to submit changes to Jenkins core and I'm delighted that you did and you found found a way to do it yourself well done. Did you did you before you submitted your pull request to Jenkins core. Did you actually build Jenkins core and see that the text was visible. Yeah, so that's the issue at first but Angelic sent me some of the code I can use to run it locally so I need to do that. Okay, great. Yeah congratulations. Thank you. And Esther no problem you're not being on mute was not a problem at all. We understand that we all have lives and our lives have sound in the background sometimes. That's not a not nothing wrong with that. Are there other questions that you have. If not what I was going to do was, I was going to go through the, the various documents that you've been using and I was going to share those on screen and see if I could ask each of you in turn. If there were things you you experienced that you wanted to help with or other areas based on the documents that we've been collecting. Oh, go ahead Esther. Oh, sorry I may have misinterpreted poster I thought you said you, you had questions I gather you may have said you had no questions okay. I wrote them down. I wanted to ask how to, not sure how to add online help for the documentation. Okay, so you said that you added help for your plugin, but you're not sure and then I lost the last one or two words there could you say those again. You're not sure say that sentence again for me. Okay, so so you added the help but you're not sure how it's going to look when when seen online. So we could show today how to view that online. From from the computer where you're doing the checking that it actually works. If that would help. That might be really good. And because that was something that I learned about when I was doing this is that you can actually preview your stuff it's from Jenkins. That's really cool. Yeah so Esther would that be okay if we did it that way. Okay and and Esther are you. Um, help that we're adding. It actually ends up in both places. So when you add the help. That's a very good question. When you add help to a Jenkins pipeline implementation inside a Jenkins plugin. For instance, in your case, I think you're working on the pipeline nodes and processes. Plug in so if you add help or improve the help for the bat. It will be included into the next step or for the node step or for the PowerShell step any one of those steps. When you do that, it will be included into the next and once the pull request is merged it will be included in the next release of that plugin. And after that next release of that plug in it will also be visible on the www.Jenkins.io site after that plugin has released so it would both be available online in every user's Jenkins installation that is installed the plug in and on the master documentation www.Jenkins.io and you can actually thank Kristen for that because she wrote the original tool that reads the contents of the release plugin and publishes it makes it ready for use on www.Jenkins.io. So now Esther, are you developing on Windows on Linux or something different. So go ahead and say that again Windows or Linux or Mac. Windows. Okay, so if it's all right. It'll take a little bit more time to show the demo on Windows but I'm on Windows so maybe it's if it's okay with you and with others I'll show it on Windows and that way the recording may be more helpful if you need to look at it later. All right, so I'm going to just start sharing my screen and we're going to go through a how do you how do you do Jenkins on a Windows computer and then how do we work with a plug in and Esther if it's okay with you I'm going to use the nodes and processes plug in or would people prefer that I use something different that none of you have done yet nodes and processes is easy enough and it's a good excuse to make something that might be helpful. So I'm going to start sharing my screen now right so you should see what looks like a terminal window in my case it's a git bash window. And I'm going to first update from from the remote repository so that I've got everything that's latest for Jenkins. And it's been a while obviously since I updated it so here is here is the most recent requests and for my benefit that you got let's I'm now going to read the I'm going to open up the the files that are on that directory and in it there's this contributing md file and it contains inside of it. The instructions on how to do a build. This is the command I want to use. It says, if you want to just build it as fast as possible without test, just do this. So I'm just going to copy that. And go ahead and run here. Now we've, I've found, at least from my observation that windows tends to run a little bit slower than my Linux experiences do. I assume that's because of virus scanning that's happening and other conveniences so this may take a little bit and we'll talk while it's while it's building so right now what it's doing is it's downloading dependencies making sure it has the most current dependencies. And now it's going to start the compilation process. So back to where I was I was in the git repository and there's this contributing file that has those instructions after this after this compilation process finishes. So then just run Jenkins with this command. Maven minus PL war, jetty colon run. And so then then once I'm doing that. I will probably need an additional window so I'm going to start another window. And here. Okay, so here, I think we said we wanted to use pipeline nodes and processes. So for that. This is the pipeline nodes and processes page. And it tells me oh I can see that plug in on the site and then over here is the GitHub link, and I'm going to click that GitHub link. And it will take me there. Now, because I always like to work in a fork, I'm going to fork here. And put it into my repository. And now I need to clone it locally. So I'm going to copy that URL and into that terminal window that I had into that get window. I'm just gonna say get clone that. Okay, so workflow durable task step. And so now usually inside inside these things there is typically a hint how to build it this one maybe not I'm just used to doing maven clean. Skip tests install. Kristen, I think that's a reasonable way to do it. If I remember correctly for for others. Are there better suggestions you have to offer than clean install or is that a workable way to do a build to get started on a plug in install works as long as it ends up creating the package or like it ends up going through the package step at the end of maven and install will do it. Yeah. And while while that's running let's take a quick look and see how my, how my other so the Jenkins build is right now doing some work with node and yarn so it's it's making progress. So the idea, then is that what I'll do is I will run Jenkins from here, and initially I'm going to choose to install the plug in as released. After installing the plugin that's released I'll just use the Jenkins UI to do that. Then I want to be able to make small changes to this plugin that I just created locally, compile it and prove that my changes are visible. So, let's see so if we look for a an HTML file, there are a few. And so maybe we want to edit. Let's see how about a step I've got to look at some of the choices here, which one should we do. So there are. If we look at the Jenkins documentation documentation pipeline pipeline steps reference. And now we're looking for nodes and processes. Okay, so we could look we could fill something in for WS to allocate a workspace. Yeah, this is a this is a reasonable one to add an example to so how about let's try adding an example to allocate workspace. So I suspect. It's this one right here. And there's the text so we see the text on screen it says allocates a workspace. This might be where we would say, see how about like this. And now I need to remember that we're using. If I remember right right Kristen this requires a rigorous matching of paragraphs start and end. Yes. It's acting like this is an XML file even though the suffix is HTML if I remember correctly right something like that where. Okay, so and then and if I want to do a break I have to say something like that. Oh, actually maybe it's even better let's just use paragraph markup like that's supposed to be. So here is this and now I'm going to in a new paragraph. And something like to allocate a workspace in a subdirectory. No, no, this is not necessarily a subdirectory right it is. I just say, dir. And it gives. Well let's try it. This is why we experiment. This is a subdirectory. So I'm used to the dirt syntax so if I said. WS. And it takes an argument dir colon. slash t slash. Let's try home mark E. And I don't know that we want this the final way, but let's put it in there. And we'll experiment with it, because this way we can test the test the thing to see that it does. Okay, so now. Let's do that. Oops. Script echo. Hello world. Okay, so I've written some something and we should be able to see that. Now let's go see how my Jenkins build is doing. And not that one. This one is right here. Okay, so now. I'm going to do the next step, which was read the directions and it says maven minus PL war jetty colon run. So copy that just excuse me just a minute. So maven minus PL war jetty colon run so I'm going to run Jenkins on my computer, starting. Okay, there we go. Okay, so that message, I think tells me that if I look now at local host for 8080 slash Jenkins, it will tell me there's a Jenkins server running there. And there it is. So that local host colon 80 and this is a brand new empty Jenkins. Now we see the, the nice little warnings over here it says Jenkins is currently unsecured and allows anyone on the network to launch processes on your behalf, secure it. In a particular case, that message is misleading because the only ones that can connect to this process right now is me on my local computer it's intentionally started that it only listens to things from my local computer. Or as a developer it's safe for you to do this inside your environment. Other other developers or attackers for instance can't reach this, because it's not listening to them it's only listening to connections on local host. So now if we look at the list of plugins, we should see installed none. Okay, so I want to get nodes and processes. There it is. So this is the one we're going to work on. So I'm going to check that and click the download now and install. Let's try install without restart. Now you'll notice it loads. A number of other plugins what it did is it contacted the Jenkins update center asked for this plugin and then read its list of dependencies and then requested all those dependencies. So now if we got that correct. I should be able to see in pipeline dash syntax. Oops. That didn't like me let's restart it shall we. So I'm going to restart it because I was expecting oh yeah it doesn't know about a pipeline job yet. I wonder so maybe Kristen do I need to install declarative pipeline in addition. Did I make a mistake here. Because for instance, I may not have it may not have installed declarative. It did not okay so I need to install another plugin I made a mistake. I just think pipeline colon declarative that I also want because I'm going to be doing some work with declarative pipeline here and notice it listed a whole number of other dependencies is bringing those in. So I had not installed pipeline basic steps or pipeline multi branch. It's taking care of all installing all those for me. I was almost a little surprised that pipeline wasn't included in the list of. I mean I could maybe see declarative but some of this other stuff so it's good to get it all pulled in. Okay. All right, now let's check it and see if pipeline dash syntax. Yes. Okay good here we go. All right so now I've got that and here is, let's see the one I used was the one I modified was WS allocate workspace. And if we look here we'll see there's online help on the help over there. This is the original in the released version of the plugin. This one gives okay more about the custom location and let's say a custom. Name. Now when I generate pipeline script. This shows up as a customer slash name. So that's that's good. Now, however, we want to take my modified plugin. I need to build it. And then I'm going to load that modified plugin into Jenkins and see if I can see the change I made to the text. It was built. If I do a get diff, it will tell me there is my change. This green text is my hint of what's change. And in the target directory, we'll see a workflow durable test step dot HPI. What I want to do now is go to Jenkins manage plugins, and I am going to go to the advanced tab. Click, and I want to upload a file by clicking choose file. And now I need to go find my home directory and it was my get directory Jenkins workflow durable test step target. And there is that HPI file. If I open that, and then click upload. Now notice what it says here it says workflow durable test step plugin is already installed Jenkins needs to be restarted for the update to take effect. So I need to restart Jenkins, and the easy way to do that is I go here and if it works the way it usually does what I'll do is I'll hit enter, and that stops and restarts Jenkins. So all I did was press the enter key or the return key for it to stop and restart Jenkins and if we now look at this page, it's going to tell us that Jenkins is restarting. So what did I do I used my web browser to upload Jenkins upload the new plugin. Then I hit enter in the terminal window where I was running Jenkins from the Maven, Jetty colon run command line. And now here I am now if I look at manage Jenkins, and I go to manage plugins. Oh, oh, plugin is missing. Did I make a mistake. Oh, this is fun pipeline is pipeline is missing workflow durable test step. Oh, that's fascinating. So Jenkins tells me something went wrong in trying to build it, or trying to load that plugin. Let's figure it out. Oh, wait a second, what mistake I made. Oh, oh, this is shameful Kristen. I am so ashamed of the mistake I made because guess what I did. I probably already had a fork of this of this. Okay, okay. Okay, so, so please forgive my mistake. Let me describe my mistake in case somebody else makes my mistake. I think anyway let me so I think what happened here is, I have cloned a copy of workflow durable test step. And I cloned it from my repository which is exactly the right thing to do, except my repository is probably out of date with the upstream repository. So I need to do something additional I need to add the upstream repository. In this case that's github.com slash Jenkins CI slash workflow durable test step. Okay, so don't tell anybody how shameful it is that I didn't think of this get fetch minus minus all. So this will pull in changes get merge upstream slash master. No. I don't understand what mistake I've made. Because normally, I think that your version of works flow is like what I would maybe check the workflow durable test step, like your palm file to see if that was ever. Yeah, which, and this says that it should be. So, if I look here, it says that the version number is two dot two hundred two dot 39 so it's newer. It's building a snapshot version. Why did it not load. Interesting okay let's go look at manage plugins and see what happened. So, is there a pipeline model definition failed to load pipeline basic steps failed to load pipeline basic steps. Oh look, I'm unable to delete. I'm now being okay got it. I'm now being hit by the fun of the windows file system. Lucky me. Okay, so, so this is this message. Okay, good that we get to diagnose it live. This message says that Jenkins in trying to do the restart was unable to remove something it was trying to remove because the directory was busy because of the way the windows file system behaves. So I have to do this a little bit harder way. And this is what I've got to do instead of Oh and look here it is the message in in the console window if I just come here to look. I could have seen the exact same message is saying but something went wrong it cannot access the file because it's in use by another process. And what that is is the windows file system saying I can't remove a busy file. So I'm going to stop it. I've stopped it. Now I'm going to restart actually and now where is when I run from here does it put the windows files in the work directory. No. Well, let me just run it again. Yeah, so yeah, did you see that. I guess like the path shows you where you're. Oh, it does right doesn't it it says right where it's going it says yeah, I should just read what's in front of me. There's a lot Jenkins Jenkins war. There we go so this one it's in the war work plugins directory so. So that was in the war work directory. War slash work. And here is a Jenkins installation and now if I look in plugins. And this just in case. Ah yes here is notice that there's a workflow durable task step back. And I'm going to remove this directory just to be absolutely sure. So workflow durable task step jpi. And now I think I'm ready to do that start again. There we go. So now I'm going to run Jenkins again so it looks like for the, the press return to restart Jenkins workflow isn't as tidy on windows as I would have liked it to be because of the busy file, the busy file problem that the windows file system has on Linux or on Mac OS, you'd see that pressing enter just let you switch, and it will restart Jenkins. So now let's try here and we should see this now saying Jenkins is starting. Oh, let's look at the installed plugins. And what we should see is that the nodes and processes. This one has a different non released for non released version number. In my case it says it was built by Mark E. That's me it was built using this particular point in the history, and it's a private snapshot of two dot 39. That is the right thing. And now if we look at the pipeline syntax. And here if we go to the WS step. If we click on this help. There's the example, although look at that that formatting is terrible. Okay, so what mistake did I make well, I didn't put line breaks into that. What was the explicit line breaks and did I. But this is good because now we can see that this is. Now you can see what it does look like. Right, right displayed so now you know that you can go and tweak it and maybe you know change how you'd like it to look but, and this is the best way to look at what it this exact piece from this overview. Oh, I'm sorry, like this would show up on the website so this is how you know what it would look like. Yeah, and that Kristen is exactly right that's a brilliant this this is yeah you described it perfectly Kristen so, so this whole this allows me now I was just going to try to see if I could make an edit to it, and watch it change live. Cool. We'll see. It's advanced. What's that. It is very advanced, like you know changing it live this is cool. I want to see if it actually does something with it because there are cases where it's, it's where I've seen, oh whoops not archive artifact we need WS. Okay, so now if I click this. Nope so it did not it did not reread it from the file system right oh no no right of course it didn't. What am I saying, that's that's silly, right. Okay, remember it's a two step process right I can't make changes inside the plug in and have those changes be immediately visible when I loaded the plug in into Jenkins. Because it's not watching this piece of the plug in file system to to find me so that's not going to work. I thought though Kristen, isn't it possible that this can work. If then I run maven HPI colon run from the plug in directory. I wonder if that's worth is worth, worth time to show that to take that I mean, or Esther or Cynthia. Do you have questions that you'd like to ask before I keep wandering on these kind of demonstration topics. There's a step that doesn't have any online. I apologize, but I didn't understand the question. I apologize, but I didn't understand the question. Could you could you ask it again. Oh okay alright yeah so you're going to use the chat. That would be great. So while that chat question is coming in I think I'm going to go ahead and try that next experiment Kristen okay so this was in this window. I'm running maven jetty colon run from inside Jenkins core. And that's that's great. But this other one. I could I think I could run maven HPI colon run. So now I'm inside the plug in directory I think you need to do you need to stop the other one. I think yeah I think it stopped when okay let's let's prove it just to be sure this should be unresponsive. I think they can't have them both running because they're both going to use the same exactly. So yeah, so that one stopped. Good, good point. And now I'm going to try this one and what maven inside the plug in directory here. So if I do maven HPI colon run what it does. If I remember correctly as it will start a Jenkins. Oh and I'm going to. I never remember which version Jenkins version people are using inside their plugins I like reasonably new versions so I'm going to say minus oops minus D Jenkins that version equals 2.277.2 because that's a current current version of Jenkins. Yes, that's a really, really, really good point. Please. With the current version because some of these I think will run very old versions, because of all the backwards compatibility. So, right. Okay, oh, good. All right, and I see Esther's question so let me get this started and then let's get to her question. So good, let's. That's a very good question. Okay, so Esther's question was, there's a step return standard out on the Google sheets and I think actually rather than a step it's probably an argument. And it's not available in the syntax generator or on the online doc. Okay, let's see if we can find that that's a that's a good question. And that if I remember right is. Let me see if I can find that in the online. Okay, so return. STD there it is okay. So what she's saying is the encoding of the process output in the case of return standard out. And that's what I see here return standard out optional. So let's see if we can find that return. Yeah, okay, so I, I think those are the ones. And Esther you're saying you were not seeing those in the online are in the pipeline steps generator. Let's let's see if we can see them. This will be good. This Jenkins is should be running here on port 8080. Let's look and see how that process yeah so here it is running. And now if this is this is a different directory than the earlier one so if I look at the plugins that are installed here. Let's see it's got Oh, there are some plugins are out of date. There are plugins that need to be upgraded, but ignore all that the nice city is there is in nodes and processes that 2.40 39 snapshot is still there. So now let's go to pipeline syntax. And here, if we look at, let's see one of the steps that was telling us about return standard out was, let's choose the windows specific when bat, where was bat so here's bat. And it has a return standard out argument let's see if we can see that in the syntax generation bat. And now, here's the help for bat executes a bat script. And Esther's question was hey, this does not have anything about return standard out, and it doesn't unless over here on the right, I click the advanced button. And some plugins have that advanced button just like that now what we see is here is return standard out. And here is the help for return standard output. So sometimes the, the thing that we're looking for is behind an advanced button. Now let's try this so I'm going to say echo. Hello world is the bat script that I want to use. And I would like to return standard out. I want the encoding on standard out to UTF eight and the label I want to only run this on the on an agent that is called master or controller. Here's the script. Okay, so there is my. There is my, my sample. Now if I create a new job that uses that I'm going to create a pipeline job. Bat in a pipeline. And now over here there's this sample and I'm going to use hello world that they use this they did echo hello world. I'm going to do bat and coding UTF a return standard out. And let's run it and see what happens. I think to just kind of looking at some of the comments in the sheet because I decided is like hey what are people. I wasn't entirely clear what where you found the return standard out so like I just did a search on the page on the user documentation sheet. And it sounds like maybe another thing that we should make sure of when we're going through and doing these steps is that there are some defaults that are selected for some of the pieces like return standard out which could be a Boolean. So it might end up being that yeah see like a Boolean so like maybe we just need to make sure that when we find Booleans we should make sure we say oh default true, because you, it becomes optional. So yeah I was like maybe that's why people were not entirely sure because they didn't know from this page alone that either the default is true or false. But when you do the snippet generator, you can easily see right because you can either check the button or when you open the snippet generator, it will either be a checkbox or unchecked box, but it's not clear from our documentation here what it is. So maybe we should put some stuff like an action like the last sentence would be default. True or like default false that might be something that we should do for a lot of the Booleans I'm not confident that it's, we've actually done that for a lot of them. But maybe maybe that would help people as well. So, that's a really good find that that's excellent, especially for anything that's optional right because for certainly an optional thing, people want to know what is the default value. And we ought to say, default is is in this case default is false right isn't that what it says so let's go back to see what is the right because also, especially some of that help doesn't really make as much sense because it says if one checked. One checked, but from the pipeline script you don't like what checked. Yeah, I'm reading a specification how would I check it so reading it from the snippet generator it's clear. Oh it's not checked by default. Okay, and return exit status is not checked by the right. So that's a really good find Esther that and that's maybe something we should include at the end of these, make sure that if there's a Boolean that we're checking what the default is and then putting that in the help in my as well. Very good well and okay there's another one hiding here. This one has to check boxes return standard output return exit status, and I truly have no idea what happens when I check both. Oh, that's cool. Oh, I'm okay. I am impressed. Interesting. All right. Okay, and but I'll bet that that is not described anywhere in the in the help. Yes, you're right. I bet I'll bet that that beautiful red text is not described anywhere in the let's see if it is just just for fun let's check so. Let's see what was the text it was, you may not select. Yeah, so that's not in the hell. And so that should be added to the help right for for that. I should get that. And I am confident that the same thing applies to, to PowerShell. Yeah. And the same thing applies to pwsh. And the same thing applies to sh. Right that each of them says should say, Oh, you can't, you can't do this or this because the reader may not realize and this is another reason why we want to keep reminding people use the snippet generator. I'm shy at saying use the snippet generator. It's the best way to get your job done. Good. Very good. So, Esther, did that address your question. Excellent question by the way, thanks very much. Okay, so we're going to I, we're, we've we've taken a lot more than the 30 minutes I'd initially assumed. Are there other questions that you would like to address. One of the things that as sort of a precursor, one of the things that Meg McRoberts is going to try to do Monday in the meeting with you is show you some ways that you can go find already existing pipeline examples that may be a help for you as you're trying to add pipeline examples into the plugins that you're working on. So what she'll do is show you some different repositories and Google search techniques you can use to find other people's pipeline examples that we can borrow that we can put into the documentation so that you don't have to spend. It'll save you a little time in trying to create those examples so my example here, let's see where was it my example here. Hello world might be better suited. I had done something with all the options so this was something like echo this is a batch script, a Windows batch script that with that returns standard out. And now this gets more complicated. So, okay, we can't do that from a controller or an agent labeled Windows labeled master. So, controller or master or Windows. Okay, so I've given all the options generate the pipeline script. Now it's this enormous thing and now I'm going to go put it into my sample. Oh, I'm in the wrong step. How embarrassing. Okay, I need to go find the correct step, but the basic idea is the same thing. I'm going to put this in here, and then I have to insert appropriate line breaks. I think we want it in code marker, etc, etc. Now, what does that mean with a. Oh, shame on me right. Okay, I should have used double quotes, so that I didn't have to worry about single quotes inside outside thing. And the way this would work is deaf return value equals that. And now, so I think we're, we're done with topics that I had intended. Do are there other topics you'd like before we call it done for today, we're getting late in your day and so let's run it again just to see we'll make our last activity, seeing if if that new added example is visible. And if I remember correctly Maven HP I run on non windows has the same behavior I can press enter to cause Jenkins to restart. So let's look at it. It'll initially tell me it's starting Jenkins. Okay, and the thing that I actually added the help to was the WS step. I know it's the wrong place. No, that's not it. Oh, there it is. Okay, allocates a workspace now. I am curious Kristen why Oh, I see why the two question marks there and I think the answer is because one is for the custom location. And the other is for the workspace step itself. And there is my example with the awkward and embarrassing thing that I didn't get the indentation correct. Not only did I not get the yeah there's a lot to improve there isn't there, but I can now see it. Anything else before we close for today. Nothing from my side. So Cynthia, I'll do, I look forward to reviewing your pull request to Jenkins core. If others of you are and when others have you submit pull requests, it would help us a bunch if you could paste a link to your pull request into the slack channels into the slack channel that we know to go review it, or you could copy us by. Let's see, let's see if I can show how you do that if you just put a specific annotation on on your pull request so let's go look at Cynthia's pull request here. Added some examples of how to archive multiple artifacts. She put at Mark II weight and that was that one sent me a reminder email oh I should review this. You even got review comments from Daniel Beck and from Kristen. And yes Daniel noted hey HTML tag to break the line. Oh, oh interesting good. All right. Yeah and we'll have to check for valid syntax on the example good. Oh, I didn't, I didn't get the feedback that Daniel provided me. Meaning you didn't you didn't understand what he was saying is that what you're saying Cynthia. Yeah, yeah, yeah, yeah. Okay good and and what what I'm going to do is in my review I will actually check interactively that the syntax is correct. And if it's not correct. I will provide a correction that that you can use to to then accept my correction and update it. And his concern is he suspects that this is this particular statement here won't work if used inside Jenkins, and I think his reasoning for that is because this colon, probably needs to replace be replaced by an opening parenthesis, and then by a close parenthesis here. I don't know if that works anyway but it'll be a because I think this one will work because it doesn't have that extra character right there. Oh, I see. I think his concern was this character is probably what will break it. Oh, okay. Yeah, I get it. Yeah, we'll move that. Great. What I'll do is he notes that I tend to be take the next step of I'll just click this propose this change. Use the same syntax in both examples. The extra colon. So start a review. And now I suspect that will be enough. I'm going to for the moment finish the review without doing an approve because I haven't actually run it yet to be sure it works. And now what you will see Cynthia on your user interface is you'll see this here, I made a comment, and here's my comment, and you'll be able to click this button, and actually say oh yeah I like that I'll take that change you can just do it right from your web web browser without having to even go into your command line and interacting with get. Thank you. Great. Very good. Thanks. All right, I'll post a copy of the recording of our session in the YouTube playlist for Jenkins for the code. Also check up. Go ahead on you know I said you could also check on my PR. Oh yes on your and your PR was your PR your PR I think was to the Artifactory repository. Yeah and that one that one is going to be very interesting, because it actually operates with slightly different rules and and we're going to so let's see if I remember right this, this will then tell us. Where is it stored in two repositories and submit pull request to this one. So if we go to that one and we look at your pull request. So here it is right. Good and so this one needs and it looks like Kristen you Kristen's already given some comments. And yes so I'll need to. Oh and you've already done the CLA very good. Excellent. And now this one may be more difficult the, I believe the maintainers of this plugin are actually based in Israel. We don't know that we can get their attention as easily as we get the attention of of coworkers in the company where Kristen and I work, but we will do our best. Thank you. All right, thank you. Anything else for today. Go ahead you say you had one last question. Sorry I heard and if we have and then I lost the rest in the question. Go ahead. I'm, I'm sorry I still missed it. I heard if we have again and I missed the rest of the sentence, could you say it one more time. Maybe you type it in the chat. I think she's asking if we should fork and clone anytime we want to make any changes. Yes. Okay, well if. So if that's the question should I fork and clone almost always you will have to fork and clone. Well you'll at least have to fork in order to propose a change. Now you could, in some of these cases propose changes to existing files, just by doing a fork and then modifying it inside GitHub. But in order to add new files it's much more difficult using the GitHub Web interface. So for me, in that case fork and clone is is much easier than trying to figure out how to add a brand new file in GitHub. Oh, oh yes okay. Maybe and so I see it thank you, Esther. All right so do we really have to fork and clone every time maybe, maybe I should be more precise because every time know. Once you've done the once you've done the first first fork, you won't have to do a fork ever again on that repository. And once you've cloned it locally you won't have to do the clone again locally you you clone is is a good copy and you can use that copy. If you were to erase that copy on your local disk then you would need to clone again, but for for later pull requests to the same repository fork and clone you do just once. Now there there is a I guess there's a subtlety there that if you're working on something that moves faster, like Cynthia's changes to Jenkins core. For weeks from now she needs to submit another change to Jenkins core. There's an additional steps you'll need to take to make her personal copy come up to date with the Jenkins copy that is upstream of her. Most of the plugins that you're interacting with I think are relatively low volume change so you probably won't encounter that any any. Okay, got it super thank you Esther. Thank you for your questions. All right, recording will be available. Thanks very very much, and we're also available on the slack channel so if you've got questions outside of the times when you meet, please post them to the slack channel. Thank you. Thank you. Bye.