---Presenter: Ben SwindleSubject: Deployment trainingDetails: Discussing IIS, CI/CD, Docker, KubernetesDuration: 01:11:11---00:00:04.970 --> 00:00:10.738 - And 1st a couple things I want to get to is now. GitHub is 00:00:10.738 --> 00:00:16.094 - another type of registry or repo as they call it. I've been using 00:00:16.094 --> 00:00:20.626 - GitHub an I've been learning git, so I've gotten good at 00:00:20.626 --> 00:00:24.334 - doing commits and pulls and pushes and deployments with 00:00:24.334 --> 00:00:29.690 - that, but I've got some project files up here that are linked to 00:00:29.690 --> 00:00:35.930 - docker hub. Now OK, so just so you guys are aware there's a lot 00:00:35.930 --> 00:00:39.930 - of different ways that automation can be set up and 00:00:39.930 --> 00:00:44.730 - we're still working out what's going to be the best fit. For 00:00:44.730 --> 00:00:47.930 - clarity, we are considering containerizing some of our 00:00:47.930 --> 00:00:52.730 - platform to eliminate some issues, so I've I've set up a a 00:00:52.730 --> 00:00:57.930 - GitHub that I brought a couple of the dev team members into as 00:00:57.930 --> 00:01:01.930 - contributors and essentially what it does from just a high 00:01:01.930 --> 00:01:03.478 - level. You is dumb. 00:01:04.040 --> 00:01:08.572 - You can have a bare metal server without IIS without anything 00:01:08.572 --> 00:01:12.692 - installed on it except for Docker, and you can literally 00:01:12.692 --> 00:01:16.812 - run, uhm, any component of your applications there. You can 00:01:16.812 --> 00:01:20.520 - actually break your application out into microservices and have 00:01:20.520 --> 00:01:25.464 - the checkout be its own separate part of the container and they 00:01:25.464 --> 00:01:30.820 - all just kind of talk together. And as far as the application is 00:01:30.820 --> 00:01:35.217 - concerned. It thinks it's inside of its own environment, even 00:01:35.217 --> 00:01:39.210 - though it's just running as a container on a server somewhere. 00:01:39.210 --> 00:01:42.840 - It's compatible with Windows 10 and Windows Server 2016 and 00:01:42.840 --> 00:01:46.470 - newer, and anyway, I'm just going to demonstrate kind of 00:01:46.470 --> 00:01:48.648 - what I've been doing with it. 00:01:49.190 --> 00:01:53.534 - Um and try to hit on some of the beneficial points surrounding 00:01:53.534 --> 00:01:57.878 - surrounding it and then let you guys ask any questions. If you 00:01:57.878 --> 00:02:02.946 - have any. So I'm going to start by going to my Azure instance. I 00:02:02.946 --> 00:02:10.068 - do have. I've got a an Azure instance set up with the VM that 00:02:10.068 --> 00:02:12.438 - is a bare metal server. 00:02:12.450 --> 00:02:16.890 - It's bare metal it just, but no nothing installed, just a base 00:02:16.890 --> 00:02:20.590 - install you don't. They're not no bloatware, nothing. Nope, you 00:02:20.590 --> 00:02:24.660 - don't install IIS, you don't. You don't really have to install 00:02:24.660 --> 00:02:28.360 - anything except Docker, because ultimately, the way that some of 00:02:28.360 --> 00:02:31.690 - these pipelines work is as the developers are developing. 00:02:31.690 --> 00:02:35.390 - They'll still spin up the install, pull the image down, 00:02:35.390 --> 00:02:38.350 - they'll run the container, they'll make their code 00:02:38.350 --> 00:02:42.050 - modifications, and then they can commit their changes from that 00:02:42.050 --> 00:02:44.270 - container. To, uh, to to the 00:02:44.270 --> 00:02:48.095 - docker hub. Where I was so like as they're, they're making 00:02:48.095 --> 00:02:51.515 - changes they can. They can do it all locally, and then they 00:02:51.515 --> 00:02:52.940 - committed to docker hub an. 00:02:53.530 --> 00:02:57.226 - And it would be a once the continuous integration part gets 00:02:57.226 --> 00:03:01.258 - pulled in. It would see that. OK, this image has been updated. 00:03:01.258 --> 00:03:05.962 - It's going to take the image and it's going to roll it into the 00:03:05.962 --> 00:03:08.986 - first pod or the first node, which would be. 00:03:09.030 --> 00:03:13.380 - Dev so it would go from local to dev. Uh, there would be a series 00:03:13.380 --> 00:03:15.990 - of testing that's done there. Some manual but mostly 00:03:15.990 --> 00:03:19.470 - automated. Just testing the crap out of the code they do what's 00:03:19.470 --> 00:03:22.950 - called like a code smell. Really checks to make sure that the 00:03:22.950 --> 00:03:26.140 - code is written following best practices and gives you kind of 00:03:26.140 --> 00:03:30.200 - a score on it and really gives you an idea of the quality of 00:03:30.200 --> 00:03:33.970 - the code so you can address any of those quality issues very far 00:03:33.970 --> 00:03:37.740 - to the left in the process so you think of our source control 00:03:37.740 --> 00:03:41.220 - process as a left or right type of process, right? Right now 00:03:41.220 --> 00:03:45.170 - we're going. Local dev, uh? Our local QUAT prod. OK well with 00:03:45.170 --> 00:03:49.094 - this this process it's going to be a little more expanded to 00:03:49.094 --> 00:03:53.672 - local. Will go to a dev branch from dev to QA, it gets tested 00:03:53.672 --> 00:03:57.923 - like crazy and then from QA to stages where you're doing all of 00:03:57.923 --> 00:04:01.193 - your like heavy load testing, you're literally putting a huge 00:04:01.193 --> 00:04:05.117 - load on the server and seeing what breaks and making sure that 00:04:05.117 --> 00:04:09.041 - from so you've already got. You've got all the bugs and the 00:04:09.041 --> 00:04:12.638 - quality of the code. Good, now we've got to test the 00:04:12.638 --> 00:04:16.235 - infrastructure and make sure that it's going to be able to 00:04:16.235 --> 00:04:20.202 - handle. The user load that would be expected in all that, so all 00:04:20.202 --> 00:04:23.754 - the load testing and all that would get done and then from 00:04:23.754 --> 00:04:27.898 - stage it would go from stage to pre prod. There would be a pre 00:04:27.898 --> 00:04:31.450 - prod environment where by the time it gets to pre prod it 00:04:31.450 --> 00:04:34.884 - should be perfect. And at that point you can deploy your 00:04:34.884 --> 00:04:37.701 - changes to a production environment in its live, then 00:04:37.701 --> 00:04:40.518 - following up from there any feature enhancements or changes 00:04:40.518 --> 00:04:44.274 - would basically it go through all of that same process. But we 00:04:44.274 --> 00:04:47.717 - would use like a green blue deployment method is what they 00:04:47.717 --> 00:04:51.473 - call it. It's where you have that pre prod in that prod 00:04:51.473 --> 00:04:55.542 - environment. So what you do is that the pre prod and prod will 00:04:55.542 --> 00:04:59.298 - pretty much always be the same until you make that you'll make 00:04:59.298 --> 00:05:02.428 - some code changes, you push it up into pre prod. 00:05:02.490 --> 00:05:06.910 - And uhm, you make sure it all works and then you switch, uh, 00:05:06.910 --> 00:05:11.670 - you just take a load balancer and you say OK, a pre prod your 00:05:11.670 --> 00:05:15.410 - now prod and the old prod environment becomes the pre prod 00:05:15.410 --> 00:05:19.150 - environment and it will get the latest code updates and it's 00:05:19.150 --> 00:05:23.230 - seamless like this site never has to come down so they Clint 00:05:23.230 --> 00:05:24.590 - what's a load balancer? 00:05:30.340 --> 00:05:33.648 - Uh, I don't know. 00:05:33.650 --> 00:05:39.850 - Balancer a load balancer is a network component that, uhm, 00:05:39.850 --> 00:05:46.835 - that can. Switch traffic on a network and it like if you have 00:05:46.835 --> 00:05:53.010 - multiple nodes setup it helps to kind of balance it like it will. 00:05:53.020 --> 00:05:57.531 - Say you have 3 three headless EMS is or three nodes running a 00:05:57.531 --> 00:06:01.695 - SMS or like our platform like Steph and those. All three of 00:06:01.695 --> 00:06:05.165 - those nodes are production in there. Basically all serving up 00:06:05.165 --> 00:06:09.329 - the same thing. If one of those nodes goes down, the load 00:06:09.329 --> 00:06:13.146 - balancer recognizes that and puts the load on the other two 00:06:13.146 --> 00:06:16.963 - remaining and then then it will spin up another instance of 00:06:16.963 --> 00:06:22.168 - that. For some reason I am not able to get in. if I may add. 00:06:22.180 --> 00:06:28.390 - Mr sits in front of your servers and it has an IP address that it 00:06:28.390 --> 00:06:32.530 - advertises. That's right, it takes the two servers behind the 00:06:32.530 --> 00:06:36.670 - load balancer with their IPS and basically dishes out balanced 00:06:36.670 --> 00:06:40.810 - traffic to each server so they can both be operating 00:06:40.810 --> 00:06:43.708 - simultaneously, and they distribute the load between 00:06:43.708 --> 00:06:49.260 - servers. And then a bin is correct. If, uh, it determines 00:06:49.260 --> 00:06:53.913 - that one server goes down, it just redirects all that traffic. 00:06:54.030 --> 00:06:58.570 - To the other server because for all intensive purposes, the 00:06:58.570 --> 00:07:04.472 - outside world only knows of one DNS name, an one IP address, so 00:07:04.472 --> 00:07:09.012 - it gives you that ability to distribute bandwidth in traffic 00:07:09.012 --> 00:07:13.552 - for websites and it also gives you failover capability. Yeah, 00:07:13.552 --> 00:07:15.368 - so like for instance. 00:07:15.880 --> 00:07:19.390 - On Wednesday morning when we did that, I ate deployment. 00:07:20.050 --> 00:07:24.835 - We deploy the code to three different notes, right? So other 00:07:24.835 --> 00:07:30.490 - than just deploying it, we had to deploy it to node one and 00:07:30.490 --> 00:07:33.100 - node two and then node 4. 00:07:33.120 --> 00:07:36.376 - The same code, the exact same process each time, 'cause. That 00:07:36.376 --> 00:07:39.632 - way when their load balancer was running, it was able to 00:07:39.632 --> 00:07:43.480 - kind of hit each one at a time, and also because since we're 00:07:43.480 --> 00:07:47.624 - deploying the same code to each one, we took one down at a time 00:07:47.624 --> 00:07:50.288 - so they never had to takedown the whole website. 00:07:51.390 --> 00:07:55.446 - Which is pretty cool. It's my first time seeing like a big 00:07:55.446 --> 00:07:59.164 - deployment like that up close and personal at 5:00 in the 00:07:59.164 --> 00:08:02.544 - morning. OK, sorry bout going now. I'm having some issues 00:08:02.544 --> 00:08:06.938 - getting to my portal at my Azure portal but but that's fine. You 00:08:06.938 --> 00:08:10.656 - know I've got Docker running locally, so I'm just going to 00:08:10.656 --> 00:08:14.374 - demonstrate based the basics of Docker right here real quick. I 00:08:14.374 --> 00:08:18.430 - mean this is just this is so right here docker images. I've 00:08:18.430 --> 00:08:22.148 - already pulled this image down. This image exists in docker hub. 00:08:22.150 --> 00:08:27.344 - I created it. It is an outer box instance of DNNI. Don't know why 00:08:27.344 --> 00:08:32.909 - azure's acting the way it is. It is an out of box instance of DNN 00:08:32.909 --> 00:08:38.103 - that I kind of tinkered with a little bit. I have a database up 00:08:38.103 --> 00:08:42.184 - in Azure now. Eventually will the databases will also be in 00:08:42.184 --> 00:08:45.152 - containers because these containers can persist data and 00:08:45.152 --> 00:08:49.975 - will have volumes where we store data either in an Azure blob or 00:08:49.975 --> 00:08:51.830 - like locally or whatever but 00:08:51.830 --> 00:08:55.182 - that's. Getting into the weeds quite a bit. I just wanted to 00:08:55.182 --> 00:08:58.206 - give you guys a high level overview. So right now I've got 00:08:58.206 --> 00:09:01.230 - this docker image pulled down and then um, going to run docker 00:09:01.230 --> 00:09:04.254 - PS and it's going to show me if there's any containers running 00:09:04.254 --> 00:09:07.278 - on my local machine. I can't remember if I have any running 00:09:07.278 --> 00:09:11.058 - right now and I do not, so we're going to go ahead and run that 00:09:11.058 --> 00:09:12.318 - image and then I will 00:09:12.318 --> 00:09:15.850 - demonstrate. Uh, basically like so, the images pulled down. 00:09:15.850 --> 00:09:19.645 - That's what takes the longest you're going to see just how 00:09:19.645 --> 00:09:24.130 - quickly like I have this image here. An right now I don't have 00:09:24.130 --> 00:09:27.925 - a DNN instance, but with a couple keystrokes I'm going to 00:09:27.925 --> 00:09:31.720 - have a fully spun up DN instance. So it'll be docker. 00:09:32.570 --> 00:09:35.468 - Run and we want to come. 00:09:36.630 --> 00:09:42.350 - We wanna do a port mapping, so I'm going to map. 00:09:42.360 --> 00:09:49.640 - 8080 on my local machine to Port 80 on the darker side and then 00:09:49.640 --> 00:09:51.200 - I'm going to. 00:09:51.910 --> 00:09:55.144 - Uh, let's see what else do I need to do docker? Uh, we need 00:09:55.144 --> 00:09:59.071 - to do the port I want to give it a name and I'm going to call it. 00:09:59.940 --> 00:10:02.250 - DNN. 00:10:03.400 --> 00:10:06.513 - Instance Will just keep it simple and then, um right up 00:10:06.513 --> 00:10:10.192 - there you can see the image ID. So I'm just going to type 00:10:10.192 --> 00:10:11.324 - in the image ID. 00:10:14.000 --> 00:10:17.108 - And I'm going to run this in detached mode. That's what I 00:10:17.108 --> 00:10:20.216 - forgot. So detached means it's going to run it as a daemon. 00:10:20.790 --> 00:10:22.566 - Uh, so that it will give me my 00:10:22.566 --> 00:10:26.960 - command prompt back. Now banks are mostly down a little bit. 00:10:26.960 --> 00:10:27.980 - What is image? 00:10:28.890 --> 00:10:33.786 - Uhm yeah, I Docker image is, uh, that that docker images ana.net 00:10:33.786 --> 00:10:38.682 - ASP IIS server. It has every single dependency on it that we 00:10:38.682 --> 00:10:43.578 - need. In fact, uh, I'll just show you guys real quick how 00:10:43.578 --> 00:10:48.474 - this image was built. The way you build images is with what's 00:10:48.474 --> 00:10:53.370 - called a dockerfile. So it goes out to Microsoft and it grabs 00:10:53.370 --> 00:10:56.634 - their certified dot NET Framework image. We're using 00:10:56.634 --> 00:11:00.306 - PowerShell to build the image, so we're going to. 00:11:00.360 --> 00:11:04.952 - Run and add the windows feature as a wet. We make it a Web 00:11:04.952 --> 00:11:09.216 - server. We add the framework. We add ASP. We remove the out of. 00:11:09.216 --> 00:11:12.496 - We remove the default web root stuff so we're removing 00:11:12.496 --> 00:11:16.104 - everything in the WW root folder because that's going to be 00:11:16.104 --> 00:11:19.712 - replaced. This dockerfile builds in out of box instance of DNN 00:11:19.712 --> 00:11:23.976 - very quickly, and I'll show you guys how that works too. So now 00:11:23.976 --> 00:11:28.240 - I'm going to run a web request and it goes out. Install service 00:11:28.240 --> 00:11:29.880 - monitor because that's how we're 00:11:29.880 --> 00:11:33.665 - going to. Run the IIS service because the way containers work 00:11:33.665 --> 00:11:37.460 - if you're telling it to run something, it runs its process 00:11:37.460 --> 00:11:41.945 - and as soon as it's done that container dies. So like in the 00:11:41.945 --> 00:11:46.430 - case of something like this, you want to you want to make sure 00:11:46.430 --> 00:11:47.465 - you're running IIS. 00:11:47.510 --> 00:11:52.281 - So anyway, so then you know this right here is just metadata that 00:11:52.281 --> 00:11:56.685 - let's anyone know that looks at this image. Then I'm the one 00:11:56.685 --> 00:12:03.900 - maintaining it. I set the security protocol to TLS 1.2. 00:12:03.900 --> 00:12:07.470 - Less, uh, it is, uh, like 00:12:07.470 --> 00:12:11.850 - it's it's. The Transport, Service, Transport, transport, 00:12:11.850 --> 00:12:17.170 - yeah, I mean it's they have different versions. We've gone 00:12:17.170 --> 00:12:23.554 - from 1.0 to 1.2 now and it is just the standard for 00:12:23.554 --> 00:12:29.938 - encrypted web traffic. OK, so then I'm going to run a web 00:12:29.938 --> 00:12:34.501 - request to. Install all the compilers that are needed to for 00:12:34.501 --> 00:12:38.778 - adyen instance to run, so we're using Roslyn, which is all it is 00:12:38.778 --> 00:12:42.397 - is it's a visual basic compiler, so once we get those 00:12:42.397 --> 00:12:45.687 - dependencies installed, we move onto setting up the remote ES 00:12:45.687 --> 00:12:49.964 - management. So this is so once I get the instance going, I can 00:12:49.964 --> 00:12:53.912 - actually use my local instance of AI is to connect to that 00:12:53.912 --> 00:12:58.518 - server and manage it, just like I would if I was logging into a 00:12:58.518 --> 00:13:00.492 - physical box or an actual VM. 00:13:00.600 --> 00:13:05.506 - So then I'm absolutely done again one more time, I'm sorry, 00:13:05.506 --> 00:13:10.412 - just for something else, I guess. Now I ask, is something 00:13:10.412 --> 00:13:15.764 - that we hear a lot specifically for folks who are on connect 00:13:15.764 --> 00:13:19.367 - projects? Um then, or Kevin or sorry better gym? You guys seem 00:13:19.367 --> 00:13:23.385 - to be really zeroed in on this stuff, so either on what is IS 00:13:23.385 --> 00:13:29.360 - stand for. Internet information service server and as those are 00:13:29.360 --> 00:13:31.160 - just the different. 00:13:31.170 --> 00:13:36.230 - Those are just the different processes running on one server, 00:13:36.230 --> 00:13:40.430 - correct? It's it's the Web server. I had web server itself, 00:13:40.430 --> 00:13:43.751 - it's just like it's it's Microsoft's version of Apache, 00:13:43.751 --> 00:13:48.917 - orange and ex. I don't know if you guys you know Apache is very 00:13:48.917 --> 00:13:53.345 - common. It's a Linux Web Server. In genetics, is the Linux Web 00:13:53.345 --> 00:13:55.190 - server. IIS is Microsoft's Web 00:13:55.190 --> 00:14:00.819 - server. With that, does that make sense? It doesn't, it 00:14:00.819 --> 00:14:03.374 - doesn't. So here's my question 00:14:03.374 --> 00:14:09.000 - when I. All of us with our connect projects right when we 00:14:09.000 --> 00:14:14.967 - have to tell someone to recycle their IIS or to reset their eye 00:14:14.967 --> 00:14:18.180 - is to make sure that connect is 00:14:18.180 --> 00:14:20.640 - running. What does that mean? 00:14:21.240 --> 00:14:25.680 - Uh, so yeah, it's recycling the apples. You can run iisreset at 00:14:25.680 --> 00:14:29.750 - the command line and it'll recycle all the app pools. Or 00:14:29.750 --> 00:14:34.190 - you can go to IIS manager, which I have it installed here 00:14:34.190 --> 00:14:36.410 - locally. You can go to IIS 00:14:36.410 --> 00:14:41.817 - manager and. And right now I don't have any. I just have the 00:14:41.817 --> 00:14:45.861 - default site and I have it stopped. But, uh, you know you 00:14:45.861 --> 00:14:49.568 - have your application pools here and you can Start Stop them, 00:14:49.568 --> 00:14:53.275 - recycle them. I currently have it spun down because I don't 00:14:53.275 --> 00:14:56.645 - want it interfering, but an important thing on that Daniel 00:14:56.645 --> 00:15:00.352 - is you should only. There are four different apples for each 00:15:00.352 --> 00:15:02.778 - site. They ask connect running. 00:15:03.280 --> 00:15:06.530 - And usually, if something's down, you don't want to recycle 00:15:06.530 --> 00:15:10.430 - all of them at once. You would like. You would typically like 00:15:10.430 --> 00:15:14.005 - to just make sure that the one that's office gets restarted. 00:15:14.640 --> 00:15:21.079 - Hum. OK. Clearly, if you want to recycle the 00:15:21.079 --> 00:15:22.033 - entire thing. 00:15:23.870 --> 00:15:27.962 - Yeah, and uh, I mean, you can, but typically it's usually the 00:15:27.962 --> 00:15:32.054 - connect app pool will hang or the the API, which is what 00:15:32.054 --> 00:15:36.146 - communicates with the stuff back end that will hang and that will 00:15:36.146 --> 00:15:39.897 - cause like problems with the calm part of the platform. So 00:15:39.897 --> 00:15:43.989 - you just want to recycle the app pool that's giving you the 00:15:43.989 --> 00:15:48.763 - problem now if you can't figure out what it is then just run the 00:15:48.763 --> 00:15:52.514 - iisreset from command prompt and it will recycle all the apples. 00:15:52.514 --> 00:15:56.265 - But generally I always try to start out with identifying which 00:15:56.265 --> 00:15:57.629 - app pool is hanging. 00:15:57.660 --> 00:15:59.670 - And try to recycle that one. 00:16:00.250 --> 00:16:03.550 - Um, and that's just done from the application pools. You'll 00:16:03.550 --> 00:16:07.840 - see you know they'll be API. They'll be the DN N1 you'll see 00:16:07.840 --> 00:16:12.626 - the connect one. You'll see one for the scheduler. Uhm and then. 00:16:13.140 --> 00:16:15.681 - You just figure out which which ones hanging. Sometimes it when 00:16:15.681 --> 00:16:18.453 - it hangs, it'll just stop itself and you'll be like Oh connects 00:16:18.453 --> 00:16:21.456 - not even running. And then you just you know you run the app 00:16:21.456 --> 00:16:22.611 - pool and bam, everything starts 00:16:22.611 --> 00:16:27.088 - working again. Or sometimes someone will have, uh? 00:16:27.600 --> 00:16:32.604 - Will be attached to the system and will be looking for code 00:16:32.604 --> 00:16:35.940 - problems and then because they're attached, nothing moves 00:16:35.940 --> 00:16:40.110 - forward and you have to figure out why that's not. 00:16:40.130 --> 00:16:44.400 - So if a dev goes and Debugs a process and they leave it in 00:16:44.400 --> 00:16:48.990 - debug mode. It it's gonna hang things up because it's gonna run 00:16:48.990 --> 00:16:50.670 - up to certain stop points. 00:16:51.190 --> 00:16:55.029 - And OK, yeah, definitely that's I've seen that happen. Be like, 00:16:55.029 --> 00:16:58.868 - Oh, you left it in debug mode. OK, that's the problem. 00:16:59.600 --> 00:17:03.110 - So, but anyway, um, so moving through here, basically, these 00:17:03.110 --> 00:17:07.673 - these lines, all they do is they set up the remote management and 00:17:07.673 --> 00:17:12.236 - they set up a user called IIS admin with this password so that 00:17:12.236 --> 00:17:15.044 - I can remotely administer the server without necessarily 00:17:15.044 --> 00:17:18.905 - having to execute command line and go into the server itself. 00:17:18.905 --> 00:17:23.819 - But you can. You can also get into the server and do all kinds 00:17:23.819 --> 00:17:28.031 - of things. This right here copies all the DNA in files and 00:17:28.031 --> 00:17:30.839 - their permissions. So I'm setting a security protocol 00:17:30.839 --> 00:17:32.945 - again for this for TLS 1.2. 00:17:33.540 --> 00:17:37.884 - I'm invoking a web request and going out to GitHub an pulling 00:17:37.884 --> 00:17:42.228 - the latest version of the NN and then the output file becomes 00:17:42.228 --> 00:17:44.038 - this on the actual docker 00:17:44.038 --> 00:17:51.122 - container. And then, uh, we expand the archive to 00:17:51.122 --> 00:17:51.886 - the 00:17:51.886 --> 00:17:55.686 - www.rootfolderweremovethearchive And we give the Apple a 00:17:55.686 --> 00:17:57.791 - permissions to that to those 00:17:57.791 --> 00:18:03.186 - files. OK, and then from there you set the working directory to 00:18:03.186 --> 00:18:07.542 - www.route you I'm removing the outer box web config and then 00:18:07.542 --> 00:18:11.898 - I'm copying a web config from Milo from the local Docker 00:18:11.898 --> 00:18:16.532 - Directory. That I set up because I wanted to make sure it was 00:18:16.532 --> 00:18:20.264 - pointing at the right database, so this last bit all it's doing 00:18:20.264 --> 00:18:23.685 - is it's taking taking the web config from where the Dockerfile 00:18:23.685 --> 00:18:27.417 - was run it there's a folder called content, it pulls out the 00:18:27.417 --> 00:18:31.149 - web config and puts it in the working directory, which is the 00:18:31.149 --> 00:18:34.570 - www.rootdirectory. Then I expose port 80 and I run the web 00:18:34.570 --> 00:18:38.302 - service and bam you have a running out of box instance of 00:18:38.302 --> 00:18:42.345 - DN. So I'll show you guys how to run the dockerfile and build 00:18:42.345 --> 00:18:44.522 - that as well. But I think what's 00:18:44.522 --> 00:18:47.965 - even neater. Here is so I now have the image running. 00:18:48.470 --> 00:18:52.700 - Uh, an it's gonna it's broadcasting on my its 00:18:52.700 --> 00:18:54.580 - broadcasting. The Docker images 00:18:54.580 --> 00:19:00.360 - port 80. On my local machine on port 8080, and then if I can use 00:19:00.360 --> 00:19:04.260 - my local machine to force that public too, if I want on port 00:19:04.260 --> 00:19:08.160 - 8080. Now for going live it would literally be 80 to 80, but 00:19:08.160 --> 00:19:12.060 - this is just I'm just testing and I don't want to have any 00:19:12.060 --> 00:19:13.560 - interference, so I just chose 00:19:13.560 --> 00:19:16.717 - 8080. Now, uh, the next thing I'm going to do is I'm going to 00:19:16.717 --> 00:19:19.564 - just run docker PS, which stands for processes and I just want to 00:19:19.564 --> 00:19:20.878 - see if that image is running. 00:19:22.450 --> 00:19:27.084 - Takes a second and it's gonna show me a list. Yes, we do have 00:19:27.084 --> 00:19:30.725 - that image running an it's named DNN instance, just like a 00:19:30.725 --> 00:19:34.697 - oops. What happened? Sorry, go back up here. I was just trying 00:19:34.697 --> 00:19:39.000 - to expand this a bit so now we have that running and now 00:19:39.000 --> 00:19:43.634 - what's really cool is I want to see what the IP address of that 00:19:43.634 --> 00:19:47.275 - server is. I don't necessarily have to. Technically I can go 00:19:47.275 --> 00:19:47.937 - to localhost. 00:19:49.590 --> 00:19:51.552 - Port 8080, it should go ahead 00:19:51.552 --> 00:19:57.210 - and run that. But I'm also going to do OK, so that's that's 00:19:57.210 --> 00:20:02.345 - because I don't have localhost as a as a portal alias in there, 00:20:02.345 --> 00:20:07.085 - but I'll show you what else we can do here. So what? 00:20:07.250 --> 00:20:14.375 - You can do a docker execute uhm and then you type in the name of 00:20:14.375 --> 00:20:19.600 - the instance DN instance and I want to execute IP config. 00:20:20.230 --> 00:20:25.105 - So this should this is going to run IP config inside of that 00:20:25.105 --> 00:20:29.605 - instance an now that is the IP address for that instance, right 00:20:29.605 --> 00:20:34.065 - so? Static right? So if you want that instance anytime, we can 00:20:34.065 --> 00:20:37.845 - just hit that IP config. Well this is gonna change but but 00:20:37.845 --> 00:20:41.310 - because the physical box is actually going to be static, it 00:20:41.310 --> 00:20:44.775 - doesn't matter if this changes 'cause it's just going to keep 00:20:44.775 --> 00:20:48.555 - serving it up on the right port. 'cause we're using reverse proxy 00:20:48.555 --> 00:20:52.965 - to just push it up to the local machine, so find it to ********* 00:20:52.965 --> 00:20:54.855 - something, though I could put in 00:20:54.855 --> 00:21:01.254 - that IP. Uh, or I need to put in the header. I knew you would put 00:21:01.254 --> 00:21:06.168 - in the, uh, you would put in the IP of the the the actual 00:21:06.168 --> 00:21:10.731 - physical local box. OK so but I'm going to take this IP and 00:21:10.731 --> 00:21:14.943 - because I'm using portal aliases and EN is funky about that, I'm 00:21:14.943 --> 00:21:16.347 - going to add A. 00:21:18.220 --> 00:21:21.766 - Basically this swindle dot US1 mean actually believe it's 00:21:21.766 --> 00:21:24.918 - swindled. Life will find out just a second. 00:21:26.790 --> 00:21:29.706 - OK, say that and now, uhm? 00:21:30.830 --> 00:21:34.990 - That's gonna go uh to that, but I do still have to point 00:21:34.990 --> 00:21:35.950 - out the port. 00:21:44.390 --> 00:21:45.750 - That should run it. 00:21:46.560 --> 00:21:49.970 - As long as my database is still up and running in 00:21:49.970 --> 00:21:53.070 - Azure, I couldn't get to Azure to confirm that's what 00:21:53.070 --> 00:21:57.100 - I was trying to do initially, but so then is this the this 00:21:57.100 --> 00:21:58.960 - the way that it works for? 00:21:59.990 --> 00:22:02.915 - For deploying across the board, no, that'll all be 00:22:02.915 --> 00:22:06.165 - automated like the only reason. So the Devs will have 00:22:06.165 --> 00:22:09.415 - to learn how to write a dockerfile and they're going 00:22:09.415 --> 00:22:13.315 - to have to learn how to work inside of a container. That's 00:22:13.315 --> 00:22:17.540 - a bit down the line, but like what? For the CD, like? What 00:22:17.540 --> 00:22:20.465 - are we going to be looking at for that? 00:22:21.530 --> 00:22:23.000 - 4 00:22:24.840 --> 00:22:28.812 - For each of those deployments to kick off, one thing I know 00:22:28.812 --> 00:22:33.777 - that will be a part of it is that with the ICD, each of the 00:22:33.777 --> 00:22:37.418 - build process is is gonna have selenium tests built into it 00:22:37.418 --> 00:22:41.059 - so that automatic testing will go on every time there's a 00:22:41.059 --> 00:22:41.390 - deployment. 00:22:43.200 --> 00:22:47.800 - An automated testing that's just kind of what is sometimes 00:22:47.800 --> 00:22:50.100 - referred to as like smoke 00:22:50.100 --> 00:22:53.690 - testing, correct? Yeah, and that'll be involve some 00:22:53.690 --> 00:22:57.710 - scripting some tests it will be rolled out there will be some 00:22:57.710 --> 00:23:01.730 - test code that will have to be written to test the code. 00:23:01.730 --> 00:23:05.750 - Selenium can be apart of that, Azure does it natively as well. 00:23:05.790 --> 00:23:08.778 - Those out Christians been working really **** ** those. 00:23:09.340 --> 00:23:15.514 - Yes he has. Yeah yeah that's why I wanna bring bring him in on 00:23:15.514 --> 00:23:19.746 - this so. It's going to be pretty cool. Um, but but yeah, as part 00:23:19.746 --> 00:23:24.342 - of that, uhm? Uh, basically once a pull request is approved then 00:23:24.342 --> 00:23:28.280 - it's everything is automated from there and no one has to 00:23:28.280 --> 00:23:31.502 - physically deploy anything, it'll just be deployed to the 00:23:31.502 --> 00:23:35.440 - next environment and that will have to be configured up front 00:23:35.440 --> 00:23:40.094 - so there will be a lot of work up front, but then moving 00:23:40.094 --> 00:23:41.526 - forward it's super easy. 00:23:42.400 --> 00:23:49.780 - Uh, so let their core. A server is a server, so if you have a 00:23:49.780 --> 00:23:53.224 - Windows Server, an Internet Internet information server, 00:23:53.224 --> 00:23:56.668 - they're both running regular Windows Server, Microsoft 00:23:56.668 --> 00:24:01.096 - server. However, you have installed a service on the 00:24:01.096 --> 00:24:06.851 - windows box. Or you call it an application that allows that 00:24:06.851 --> 00:24:13.199 - server to host web pages and it's just like exchange, uh? If 00:24:13.199 --> 00:24:18.489 - you're going to have exchange an email server first you. 00:24:19.090 --> 00:24:23.086 - Create the Microsoft Windows server. Then you install the 00:24:23.086 --> 00:24:28.414 - exchange application and now you have a Mail server and IIS takes 00:24:28.414 --> 00:24:34.186 - a Windows Server and then calls it. Makes it a Web server OK. 00:24:34.720 --> 00:24:41.708 - So. And a load balancers can be either software 00:24:41.708 --> 00:24:44.432 - based or hardware based. 00:24:45.110 --> 00:24:50.291 - Piece of equipment. A man they can be virtualized or not 00:24:50.291 --> 00:24:55.001 - virtualized? Yeah, so the key with load balancers is they 00:24:55.001 --> 00:25:00.182 - serve a couple two or three purposes. One they can balance 00:25:00.182 --> 00:25:02.537 - the load of traffic hitting 00:25:02.537 --> 00:25:08.884 - multiple. Instances of a Web server OK, or any server or an E 00:25:08.884 --> 00:25:13.054 - Commerce we could use. We could have two Seth environments 00:25:13.054 --> 00:25:17.641 - exactly the same, except they have two different IPS. They go 00:25:17.641 --> 00:25:23.062 - to load balancer that has one IP and it advertises that IP and 00:25:23.062 --> 00:25:28.900 - the name of that says server both of 'em to the world. So if 00:25:28.900 --> 00:25:33.502 - its clarity.server.com. And on the back end, it's a clarity 00:25:33.502 --> 00:25:38.689 - Seth Server. One in clarity set server 2. All the world knows is 00:25:38.689 --> 00:25:43.477 - clarity chef server exactly and a top level right? Yeah, and it 00:25:43.477 --> 00:25:49.063 - does fail over and you can add if you have two sets servers and 00:25:49.063 --> 00:25:55.048 - now you need 3 four you can add as many as you want and that 00:25:55.048 --> 00:25:59.038 - load balancer will distribute across the servers and it can 00:25:59.038 --> 00:26:01.432 - even do it across the country. 00:26:01.460 --> 00:26:07.643 - Or two different datacenters, um or different? You know 00:26:07.643 --> 00:26:11.480 - continents. Jim, is that a CD in? 00:26:14.590 --> 00:26:20.359 - No, no, it's a CPM now that sounds fascinating. 00:26:20.360 --> 00:26:24.750 - Is a proxy. It's a certain content delivery network. It's 00:26:24.750 --> 00:26:26.945 - like cloud player or uh. 00:26:26.950 --> 00:26:31.462 - Imperva is another one. They're just as it is basically a proxy 00:26:31.462 --> 00:26:35.974 - that sits between the origin server or the IT can sit between 00:26:35.974 --> 00:26:40.486 - the load balancer as the origin server and the public, and it 00:26:40.486 --> 00:26:44.998 - serves up, and the idea is that hide your origin address and 00:26:44.998 --> 00:26:48.006 - also increases your speed because they'll have servers 00:26:48.006 --> 00:26:52.518 - spread out all over the world that are going to cash and 00:26:52.518 --> 00:26:54.022 - replicate your static content. 00:26:54.590 --> 00:26:58.550 - So, uh, you don't have latency issues like around the world 00:26:58.550 --> 00:27:01.790 - with people accessing your site because of regional distances 00:27:01.790 --> 00:27:06.110 - between the origin server, but it's it's a proxy that cash is 00:27:06.110 --> 00:27:09.350 - all your stuff on multiple servers regionally spread out 00:27:09.350 --> 00:27:12.950 - throughout the world, so when someone goes to request access 00:27:12.950 --> 00:27:17.630 - to your site by going to your domain, it's going to hit the 00:27:17.630 --> 00:27:21.590 - closest Cloudflare proxy to them, and that proxy is going to 00:27:21.590 --> 00:27:26.630 - serve up the site to them and it also has a lot of security 00:27:26.630 --> 00:27:28.070 - stuff. It's very commoditised. 00:27:28.140 --> 00:27:32.716 - But yeah, CD NS are pretty cool cloud players. The one we use 00:27:32.716 --> 00:27:34.124 - most of the time. 00:27:34.870 --> 00:27:39.190 - Uh, but they're they're, uh, it's not it's it's not like a 00:27:39.190 --> 00:27:42.430 - load balancer. The load balancers just like what would 00:27:42.430 --> 00:27:46.750 - Jim was saying it just it's a layer that sits between the 00:27:46.750 --> 00:27:50.710 - outside and your nodes like you can have multiple nodes behind 00:27:50.710 --> 00:27:54.670 - it and it doesn't matter. They can all have different IP 00:27:54.670 --> 00:27:58.270 - addresses because according to the world the world only sees 00:27:58.270 --> 00:28:02.230 - the IP address being broadcasted by the load balancer and then. 00:28:02.230 --> 00:28:06.190 - So this is maybe something that I just learned this recently. 00:28:06.200 --> 00:28:09.854 - Do you guys know the difference between what is 00:28:09.854 --> 00:28:13.508 - it? Sticky load balancers, an not sticky load balancers? 00:28:14.610 --> 00:28:18.705 - No, I don't. What's the difference? This is fascinating. 00:28:18.705 --> 00:28:24.620 - So there's sticky load balancers and with those do is that if you 00:28:24.620 --> 00:28:30.080 - say you go to a website that's got three different web heads, 00:28:30.080 --> 00:28:33.773 - right? And the first time you go there, you land on what? 00:28:34.400 --> 00:28:38.980 - If your load balancer is sticky every time afterwards, you're 00:28:38.980 --> 00:28:40.812 - going to hit one. 00:28:41.810 --> 00:28:45.422 - But if your load balancer is not sticky every time you hit 00:28:45.422 --> 00:28:48.432 - that load balancer, you hit one of the three servers. 00:28:50.120 --> 00:28:55.160 - So you guys might have this come up on your projects if you do 00:28:55.160 --> 00:28:59.480 - something where they were going to have a load balancer, do you 00:28:59.480 --> 00:29:03.800 - guys need sticky or not sticky? We do not need sticky load 00:29:03.800 --> 00:29:08.480 - balancers. For what it's worth is that where it just does it in 00:29:08.480 --> 00:29:12.080 - sequential order versus randomly kind of, so there's the one 00:29:12.080 --> 00:29:16.040 - thing where it's like if they I think most round most. 00:29:16.070 --> 00:29:20.347 - Jim or anyone please correct me if I'm wrong here, but from what 00:29:20.347 --> 00:29:23.966 - I understand is that load balancers work for the most part 00:29:23.966 --> 00:29:28.243 - in round Robin. So if you're a new visitor to the website, if 00:29:28.243 --> 00:29:32.849 - you me and Jim, I'll go to the same website at the exact same 00:29:32.849 --> 00:29:37.455 - time it's going to drop off you. Kyle at one gym at two and 00:29:37.455 --> 00:29:42.061 - three. Now if you are the three of us visit next week at the 00:29:42.061 --> 00:29:46.338 - same time, but you I'm a little quicker on the draw that day. 00:29:46.420 --> 00:29:51.205 - I'll go to one. You'll go to a gym, goes to three unless it's a 00:29:51.205 --> 00:29:55.033 - sticky Web Server, in which case I am now a three boy. 00:29:55.600 --> 00:29:59.104 - You want a guy who goes to three, that's me, but I'm 00:29:59.104 --> 00:30:00.564 - sticky. I stick with three. 00:30:01.820 --> 00:30:06.128 - Would we all be willing to go go to portal.azure.com real quick 00:30:06.128 --> 00:30:10.795 - and see if it's pulling up? I this is acting like it's just 00:30:10.795 --> 00:30:15.103 - like down. I mean itll.azure.com yeah, just see if it pulls up 00:30:15.103 --> 00:30:20.129 - for you. It is maybe I need your pulling up right now. God Dang 00:30:20.129 --> 00:30:25.155 - it. I'm up in the mix I don't know. I had this website isn't 00:30:25.155 --> 00:30:29.463 - that wild guys. How many things we have on the windows thing 00:30:29.463 --> 00:30:31.617 - that was like what? What is 00:30:31.617 --> 00:30:36.690 - this? Bad if you're no longer amazed by that anymore now. 00:30:36.690 --> 00:30:41.670 - Your DevOps uhm, then uh on the portal.azure.com you're going 00:30:41.670 --> 00:30:45.370 - to. You should be automatically logged in and it'll show you 00:30:45.370 --> 00:30:50.596 - kind of like. The front end of art are Azure instance 00:30:50.596 --> 00:30:54.364 - clarity's. But I don't 00:30:54.364 --> 00:30:58.606 - understand that. This really sucks. I'm going to reboot my 00:30:58.606 --> 00:31:02.350 - router real quick. If you guys don't mind 'cause I think it's 00:31:02.350 --> 00:31:05.782 - something with my router. Give it a shot. Sorry, I'll probably 00:31:05.782 --> 00:31:07.654 - be dropped off for like 2 00:31:07.654 --> 00:31:10.618 - minutes. Temperatures appreciate it, of course, so in the mean 00:31:10.618 --> 00:31:14.414 - time guys, let's keep on going on this. 'cause I do think that 00:31:14.414 --> 00:31:16.458 - this is a big thing. Um, that. 00:31:17.020 --> 00:31:21.804 - You know, I know that we've all sort of had some struggles with 00:31:21.804 --> 00:31:26.588 - in the past, and again, just kind of leaning into some of the 00:31:26.588 --> 00:31:29.532 - struggles we've seen this week specifically with deployment. 00:31:30.620 --> 00:31:35.960 - And, uh, get an pulling the such like that now. 00:31:36.510 --> 00:31:40.085 - Um Sam, I know you're the newest person so I'm just gonna pick 00:31:40.085 --> 00:31:41.460 - any a little bit, uh? 00:31:42.000 --> 00:31:48.253 - How much, if at all, have you been brought into some of these 00:31:48.253 --> 00:31:53.063 - ideas of stuff like um, push and pull requests? Uhm? 00:31:53.930 --> 00:31:59.942 - Locals deploying those that kind of world. How much I have done 00:31:59.942 --> 00:32:05.453 - less than the bare minimum of that. Yeah, like my whole 00:32:05.453 --> 00:32:11.465 - exposure to like our PM work so far. Is there just like 00:32:11.465 --> 00:32:15.473 - coordinating? Not really getting into the weeds of. 00:32:16.040 --> 00:32:21.190 - The actual tasks in, like the steps throughout the process. 00:32:22.240 --> 00:32:27.826 - OK, cool. So let's get into and there's something I'm 00:32:27.826 --> 00:32:32.468 - probably not quite qualified to train on here, but let's get 00:32:32.468 --> 00:32:37.532 - into some more nitty gritty on this CI CD pipeline thing. While 00:32:37.532 --> 00:32:43.018 - we're waiting for Ben now, does it? see I see makes sense to 00:32:43.018 --> 00:32:46.816 - everyone here, and if it doesn't, please speak up. 00:32:51.430 --> 00:32:56.149 - 'cause I don't get all makes sense to me, but what we talked 00:32:56.149 --> 00:32:57.238 - about makes sense. 00:32:57.240 --> 00:33:01.488 - On what level are we judging what makes sense? That's a great 00:33:01.488 --> 00:33:06.090 - great qualifier, guys. Yeah, um. So let me just trying to find a 00:33:06.090 --> 00:33:09.984 - good kind of graphic and I know that these graphics aren't 00:33:09.984 --> 00:33:11.400 - always the most useful. 00:33:11.920 --> 00:33:15.320 - Um, careful with graphic 00:33:15.320 --> 00:33:22.055 - people. Make sure it's not too graphic up. Let's see see if 00:33:22.055 --> 00:33:25.265 - there's an Azure CI CD pipeline. 00:33:25.850 --> 00:33:29.318 - Infographic OK cool. 00:33:30.160 --> 00:33:32.890 - Yeah, this is perfect OK. 00:33:34.230 --> 00:33:39.180 - So let me share my screen. 00:33:45.600 --> 00:33:48.400 - OK, when you guys can see this. 00:33:51.870 --> 00:33:58.214 - Yeah, OK cool. So this is gonna be a sensually the workflow that 00:33:58.214 --> 00:34:01.142 - we are going to be integrating. 00:34:02.340 --> 00:34:07.956 - Almost to the level here guys. So our world of course is down 00:34:07.956 --> 00:34:10.116 - here in this Azure boards. 00:34:11.110 --> 00:34:14.530 - Here we're gonna be assigning our engineers tickets, which 00:34:14.530 --> 00:34:18.710 - they bring into the Azure repo as they're pushing up with. 00:34:18.710 --> 00:34:22.890 - Sorry, they bring their Visual Studio with its VSC pushing that 00:34:22.890 --> 00:34:27.450 - completed work up into the repo does. I'm going to get pushed 00:34:27.450 --> 00:34:31.371 - through. Um Christians testing 00:34:31.371 --> 00:34:35.660 - plans. And then back up through the pipeline. So 00:34:35.660 --> 00:34:38.855 - basically, and I wonder, I thought this would have 00:34:38.855 --> 00:34:42.405 - kind of a more clean infographic as to the way 00:34:42.405 --> 00:34:43.470 - CI CD works. 00:34:45.430 --> 00:34:48.653 - See if they're saying it's a bit more, maybe not for 00:34:48.653 --> 00:34:49.239 - Azure specifically. 00:34:54.050 --> 00:34:58.454 - But the bottom line, if it is, is, as the code is. 00:34:59.130 --> 00:35:02.379 - Complete, it's going to be a one to one. 00:35:03.430 --> 00:35:09.070 - A one to one relation between what the pipeline is, an what 00:35:09.070 --> 00:35:14.710 - the live server is. So if they are building 1 specific feature, 00:35:14.710 --> 00:35:20.350 - say that we have a carton, the cart needs to get tweaked 00:35:20.350 --> 00:35:25.520 - because in this new cart they want pink buttons rather than 00:35:25.520 --> 00:35:31.160 - blue. We don't have to takedown the entire site just to change 00:35:31.160 --> 00:35:32.570 - that from happening. 00:35:33.070 --> 00:35:38.160 - That one specific feature can be brought into the entire 00:35:38.160 --> 00:35:43.759 - solution and then just on a standard refresh of the page 00:35:43.759 --> 00:35:49.358 - we can bring that one piece up to the live pipeline. 00:35:53.850 --> 00:35:54.870 - Does that make sense? 00:35:57.950 --> 00:35:59.288 - It's in Spain. 00:36:00.510 --> 00:36:03.730 - So yes, taking individual. 00:36:04.960 --> 00:36:08.767 - Peace like a pull request and only deploying that 00:36:08.767 --> 00:36:11.728 - piece that's working correct. 'cause that one 00:36:11.728 --> 00:36:15.958 - piece will pass testing and then once it's past it 00:36:15.958 --> 00:36:20.188 - testing and once it's confirmed to be a valid pull 00:36:20.188 --> 00:36:21.880 - request it gets deployed. 00:36:23.990 --> 00:36:28.802 - OK, that does make sense if it's bugged anywhere we can see 00:36:28.802 --> 00:36:33.213 - exactly where the test broken know exactly where to fix it. 00:36:33.213 --> 00:36:35.619 - That's that's the beauty of it 00:36:35.619 --> 00:36:40.369 - too. Do you have one question and maybe this is some benore 00:36:40.369 --> 00:36:45.166 - Garrett share you know? Uhm, do we know at what stage this is 00:36:45.166 --> 00:36:49.225 - being implemented? I've heard like it should be by next month, 00:36:49.225 --> 00:36:54.022 - but I was just curious 'cause it does seem like a nebulous goal. 00:36:54.022 --> 00:36:59.557 - Do we know there's like a end of August is the plan sure? But do 00:36:59.557 --> 00:37:03.985 - we know it would stage? We are implementing this. We are. We 00:37:03.985 --> 00:37:05.461 - are very beginning stages. 00:37:06.620 --> 00:37:12.380 - Um, so we, I mean, as far as, uh, as far as setting up the 00:37:12.380 --> 00:37:16.604 - pipeline goes. Eric, Chris and I, uh, are planning on getting 00:37:16.604 --> 00:37:21.212 - together and working on this on nights and weekends. We have to. 00:37:21.212 --> 00:37:25.052 - We just have to go in and configure our Azure. 00:37:25.670 --> 00:37:30.108 - To do it. And, um, there's going to be some trial and error. I 00:37:30.108 --> 00:37:34.229 - mean, Uh, I know Chris is set up pipelines before. Uhm, so he's 00:37:34.229 --> 00:37:38.033 - going to know, uh, I mean, it's not anything that he hasn't 00:37:38.033 --> 00:37:41.520 - done. I've never done it before, but um, I'm pretty confident 00:37:41.520 --> 00:37:45.641 - that at the end of August is not an unrealistic goal for getting 00:37:45.641 --> 00:37:47.543 - that rolled out for our company. 00:37:47.570 --> 00:37:52.250 - It will also I think I'm wrong, but I also think a big part of 00:37:52.250 --> 00:37:56.306 - it too. Would be, uh, I mean Christian. Also jump in, but I 00:37:56.306 --> 00:37:59.738 - would say building out those automated tests for all of that, 00:37:59.738 --> 00:38:03.482 - that testing to run behind, and James would still have to get 00:38:03.482 --> 00:38:05.354 - all of that in the Azure 00:38:05.354 --> 00:38:09.718 - Codebase as well. Correct me if I'm wrong, pretty sure. 00:38:13.020 --> 00:38:16.572 - And store fronts pretty much done as of now, and we're going 00:38:16.572 --> 00:38:19.532 - to admin and Christian said admin's been pretty Big Bear, 00:38:19.532 --> 00:38:23.380 - but it's I mean if I mean we're making good progress on it. 00:38:24.260 --> 00:38:27.641 - Yeah, we just got fixed bugs. We 00:38:27.641 --> 00:38:32.970 - are. And then it just another big qualifier here. This is only 00:38:32.970 --> 00:38:38.690 - for Seth 2021 builds and and newer, so if you don't have self 00:38:38.690 --> 00:38:40.890 - 21 or newer yadda luck. 00:38:42.450 --> 00:38:46.428 - Yep, yeah and only hold up here is, you know we're trying to 00:38:46.428 --> 00:38:49.430 - build out. Yeah. 00:38:49.430 --> 00:38:51.622 - Well, we're building out automated tests when there's 00:38:51.622 --> 00:38:55.184 - still a lot of bugs present, so it's like trying to like, you 00:38:55.184 --> 00:38:58.472 - know, draw a map from a place you've never been. You know, 00:38:58.472 --> 00:39:01.212 - it's it's like it's a little bit. You know, counter 00:39:01.212 --> 00:39:04.500 - Intuitive, but once we have them in place, it should be pretty 00:39:04.500 --> 00:39:06.966 - straightforward. From that point, it's going to be awesome 00:39:06.966 --> 00:39:08.610 - when it's done, but still then. 00:39:09.430 --> 00:39:14.338 - And so, like I was saying earlier, I think I was saying 00:39:14.338 --> 00:39:19.655 - earlier it's been a long, long week. Uhm, but the we did see 00:39:19.655 --> 00:39:21.700 - ICD 4 set for I. 00:39:22.610 --> 00:39:28.094 - So we can take most of those build definitions that we used 00:39:28.094 --> 00:39:32.664 - for that and bring them into what we have now. 00:39:33.340 --> 00:39:38.332 - So click this is another thing where we can leverage a decent 00:39:38.332 --> 00:39:42.908 - amount of work we've done already. But when those tests be 00:39:42.908 --> 00:39:47.068 - very specific to their system, which was highly customized, yes 00:39:47.068 --> 00:39:52.060 - and no. From what I gather, I guess it's something like submit 00:39:52.060 --> 00:39:55.388 - what you're saying, like it's, you know, the. 00:39:56.250 --> 00:40:00.760 - The. The layout or sorry like the upholstery might not be 00:40:00.760 --> 00:40:05.030 - right, but the general frame of the car is the same. OK, yeah, I 00:40:05.030 --> 00:40:06.555 - I get what you get. 00:40:08.190 --> 00:40:11.889 - There will be see data that supports the testing. 00:40:15.180 --> 00:40:19.886 - And I tell you what guys. That's yeah CD stuff. When we were 00:40:19.886 --> 00:40:20.972 - doing those um. 00:40:21.860 --> 00:40:25.361 - The builds fry a. They select the branch and 00:40:25.361 --> 00:40:26.917 - they press a button. 00:40:28.350 --> 00:40:30.170 - We could be doing builds. 00:40:30.670 --> 00:40:32.896 - You know, triggering the CI CD. 00:40:33.590 --> 00:40:37.790 - Um, for projects for our self. If we wanted to. 00:40:39.070 --> 00:40:42.350 - It's like putting a Turbo charger on your car makes 00:40:42.350 --> 00:40:43.662 - it go real fast. 00:40:47.130 --> 00:40:50.243 - And it's not like a huge sea change for the whole 00:40:50.243 --> 00:40:53.022 - organization. It's more like an 00:40:53.022 --> 00:40:55.020 - implementation. 'cause I definitely understand where 00:40:55.020 --> 00:40:56.856 - you're coming from. Clint, with the question of like, 00:40:56.856 --> 00:40:59.100 - OK, cool, we're talking about one. Is it going to happen? 00:40:59.100 --> 00:41:01.344 - This is something that has a lot of legs to it. 00:41:05.670 --> 00:41:11.448 - Sure. Getting for anything like that I know. 00:41:11.450 --> 00:41:17.740 - Images. Good for you man no. 00:41:17.740 --> 00:41:22.719 - Will be done. Yeah question man, you know I don't know. No hint 00:41:22.719 --> 00:41:27.315 - of negativity from why, why why you gotta be project managing me 00:41:27.315 --> 00:41:31.911 - bro. What's up with that? Not just playing just fine. I feel 00:41:31.911 --> 00:41:35.358 - like this should have been done a while ago. 00:41:35.390 --> 00:41:40.317 - Really, I haven't been given a lot of like feedback on why it's 00:41:40.317 --> 00:41:44.540 - not done. Back on that listen, I've gotta listen. I've got a 00:41:44.540 --> 00:41:48.692 - friend that's a Google Engineer do Dan less he where he works 00:41:48.692 --> 00:41:52.844 - for Hertz. He works for Google. He does. He's got 10,000 VMS 00:41:52.844 --> 00:41:56.650 - that he manage is between a WS and Google and Microsoft. 00:41:57.430 --> 00:42:00.510 - We are not the only company going through this exact same 00:42:00.510 --> 00:42:04.150 - thing. In fact there are a lot of companies in Austin that are 00:42:04.150 --> 00:42:06.950 - software companies that are nowhere near as mature as we 00:42:06.950 --> 00:42:09.750 - are. There's a lot of team companies that have leaders 00:42:09.750 --> 00:42:13.659 - that. Literally, you could. They just don't know what they're 00:42:13.659 --> 00:42:16.860 - doing. We are fortunate enough to have a team of leadership 00:42:16.860 --> 00:42:20.643 - that knows to spend money on tools and that that are going to 00:42:20.643 --> 00:42:24.135 - save us time anyway. To make a Long story short, we are 00:42:24.135 --> 00:42:28.600 - literally. Going through the exact same thing that so many 00:42:28.600 --> 00:42:32.400 - companies are going through right now, large and small and 00:42:32.400 --> 00:42:35.820 - medium alike. I mean, UM, this this is literally. 00:42:36.790 --> 00:42:40.580 - Um, something that, like the big companies that are successful 00:42:40.580 --> 00:42:45.128 - like Amazon. This is what how Netflix rolls. I mean it is. 00:42:45.700 --> 00:42:50.133 - It is slightly complicated to set up, but it is once you get 00:42:50.133 --> 00:42:53.884 - it going. I mean this automating your whole process. This is 00:42:53.884 --> 00:42:57.976 - going to save our company so much money, but yeah, we're not 00:42:57.976 --> 00:43:02.068 - the only ones that are going through this. This is a normal 00:43:02.068 --> 00:43:04.455 - part of the organic growth of a 00:43:04.455 --> 00:43:09.530 - company. I really was just kidding, but thank you for that 00:43:09.530 --> 00:43:13.229 - explanation. Oman, I was ready for that. Not good. 00:43:13.240 --> 00:43:17.080 - He's been saving this up for 00:43:17.080 --> 00:43:21.594 - a year. Is it like in front of mirror? He had to look? 00:43:22.350 --> 00:43:24.560 - But 00:43:24.560 --> 00:43:29.610 - **** Well and you know, I started digging into this. Uh, 00:43:29.610 --> 00:43:33.705 - just like last weekend guys. So you know I am nowhere near an 00:43:33.705 --> 00:43:37.800 - expert on this. I I would not even rank myself as an amateur 00:43:37.800 --> 00:43:42.210 - yet, um, but I've learned a lot along the way. I wish I could 00:43:42.210 --> 00:43:45.360 - share more concrete data with you, an unfortunately like I'm 00:43:45.360 --> 00:43:49.140 - having all kinds of network issues now an I'm going to have 00:43:49.140 --> 00:43:53.235 - to figure out. I think I'm being IP blocked. I really wanted to 00:43:53.235 --> 00:43:56.385 - demonstrate some really cool stuff to you guys. That's going 00:43:56.385 --> 00:43:58.590 - to have to wait till next week. 00:43:58.650 --> 00:44:03.765 - But once I get all set up, which I'm gonna take care of that all 00:44:03.765 --> 00:44:07.857 - this weekend, I've got to get everything going so I can keep 00:44:07.857 --> 00:44:11.949 - working. But next week, uh, I'll give you guys another update and 00:44:11.949 --> 00:44:16.382 - I'll be more prepared with with, uh, you know I'll go slower and 00:44:16.382 --> 00:44:19.451 - I'll just kind of just demonstrate. I'll try to 00:44:19.451 --> 00:44:23.884 - demonstrate like some actual CI CD stuff. I plan on setting up a 00:44:23.884 --> 00:44:27.635 - test pipeline with my Azure instance if I can ever get 00:44:27.635 --> 00:44:28.658 - logged into it. 00:44:28.720 --> 00:44:32.906 - And then then I can. No, it's just like spinning like look at 00:44:32.906 --> 00:44:37.212 - this, it's crazy. Oh oh in Incognito window. It worked OK. 00:44:37.212 --> 00:44:41.460 - Hey, I might be able to get somewhere now. No, that's not 00:44:41.460 --> 00:44:43.938 - the log in. I wanted to use. 00:44:43.950 --> 00:44:47.310 - And then right? OK here he doesn't need to show his screen 00:44:47.310 --> 00:44:50.670 - to watch his failure. Let him let him success and then right 00:44:50.670 --> 00:44:54.310 - here you guys can watch me fail until I get there. I don't 00:44:54.310 --> 00:44:58.230 - know. So I have my own Mail server so I just kind of like 00:44:58.230 --> 00:44:59.910 - use that for my other measurements. 00:45:00.950 --> 00:45:03.886 - If anybody wants to swindlemail.com email, let me 00:45:03.886 --> 00:45:09.024 - know that you have it for free, so window Mail. That's a thing I 00:45:09.024 --> 00:45:13.061 - might not make it sound that sounds like something no one 00:45:13.061 --> 00:45:16.840 - wants. Uhm, I disagree. I 00:45:16.840 --> 00:45:22.394 - like it. Not really want to send junk like the junk Mail. I could 00:45:22.394 --> 00:45:24.326 - just send them to my swindle 00:45:24.326 --> 00:45:27.212 - Mail account. This is gotta be 00:45:27.212 --> 00:45:31.235 - fake. Got a little marketing branding campaign to work on 00:45:31.235 --> 00:45:36.240 - Garrett. Yeah, no. OK, I finally I finally got into my cloud. Oh 00:45:36.240 --> 00:45:40.860 - no. OK, here we go. So it LogMeIn. So let me see. 00:45:41.790 --> 00:45:44.078 - Please take me to. 00:45:45.240 --> 00:45:50.820 - My instance come on, you can do it yes, OK, OK, so now I just 00:45:50.820 --> 00:45:53.424 - have to come in here and, uh. 00:45:53.970 --> 00:46:00.095 - Go and. Give myself I gotta go to network what it is. I'm 00:46:00.095 --> 00:46:04.450 - being IP blocked. I know it. Uhm yeah, OK I'll fix that real 00:46:04.450 --> 00:46:09.140 - quick. So if you guys want to keep talking give me like a few 00:46:09.140 --> 00:46:13.830 - minutes here and I might be able to show you guys some cool stuff 00:46:13.830 --> 00:46:17.515 - real quick. OK cool because they don't have any other questions 00:46:17.515 --> 00:46:21.148 - about. Um deployment about. 00:46:21.760 --> 00:46:24.470 - These sorts of things 'cause I feel like we have. 00:46:25.040 --> 00:46:31.805 - Um, a lot of kind of things that we line up against that sort of 00:46:31.805 --> 00:46:35.864 - get into these sort of difficult conversations in different 00:46:35.864 --> 00:46:39.198 - situations with. In fact, actually this is something we 00:46:39.198 --> 00:46:42.638 - kind of talked about. The major meeting this week about 00:46:42.638 --> 00:46:45.734 - deployment. Garrett has a process for deployment that has 00:46:45.734 --> 00:46:49.862 - had some success and Clint has just had to sort of implement 00:46:49.862 --> 00:46:51.926 - something similar to this on his 00:46:51.926 --> 00:46:54.590 - projects. And these are these 00:46:54.590 --> 00:46:58.370 - deployment tickets. Maybe we can talk about it for a little bit. 00:46:58.370 --> 00:47:01.308 - Just we're going to have one solid way we're doing it for all 00:47:01.308 --> 00:47:05.149 - the projects moving forward. Um Garrett, do you wanna talk about 00:47:05.149 --> 00:47:08.593 - your process? 'cause I know you said it like you could describe 00:47:08.593 --> 00:47:10.028 - it in 2 1/2 minutes? 00:47:10.210 --> 00:47:14.926 - My process for the deployment tickets? Uh Huh. Or just like in 00:47:14.926 --> 00:47:19.429 - general. Oh why assigning user story that is a deployment 00:47:19.429 --> 00:47:24.903 - ticket. I love it and then I make a task for one person that 00:47:24.903 --> 00:47:29.595 - says deploy to QA and another task for that same person is 00:47:29.595 --> 00:47:34.678 - deployed it you 80 and I only assign one of those per person 00:47:34.678 --> 00:47:38.979 - per Sprint so that there's only one deployment that's done and 00:47:38.979 --> 00:47:43.280 - everyone knows who that person is and they can all communicate 00:47:43.280 --> 00:47:45.626 - from that with that person. So 00:47:45.626 --> 00:47:51.498 - do you. Do you give um, do you give proctors to one to deploy? 00:47:51.498 --> 00:47:56.685 - Or do you just allow it to deploy on its own? It depends. 00:47:56.685 --> 00:48:02.670 - If I have a need for it for a deployment, I would talk to that 00:48:02.670 --> 00:48:07.857 - one person, say, hey, can we deploy by this date and then get 00:48:07.857 --> 00:48:12.246 - the QA done and then deploy this for you 80 bin? 00:48:12.780 --> 00:48:14.800 - And then I just contact everybody else and say Hey, 00:48:14.800 --> 00:48:17.224 - we need to make sure your tickets are done by this day 00:48:17.224 --> 00:48:18.234 - so this person can deploy. 00:48:19.410 --> 00:48:23.082 - But you don't have like a schedule for it or anything like 00:48:23.082 --> 00:48:26.142 - that. No, Kevin, didn't like, doesn't like the idea of 00:48:26.142 --> 00:48:30.816 - scheduling deployments. OK, do you could you give us some? 00:48:31.490 --> 00:48:33.686 - Do his reasoning on that. If you know it. 00:48:35.790 --> 00:48:40.780 - Um? Well, his reasoning was that shouldn't be done. We shouldn't. 00:48:40.780 --> 00:48:45.135 - We should just be deploying at the end of this print. And then 00:48:45.135 --> 00:48:49.825 - there's a week of QA. And then we diploidy you 80 and I'm like 00:48:49.825 --> 00:48:53.175 - that's fine, but that's not actually feasible with how we 00:48:53.175 --> 00:48:58.855 - work now. Feed and now we're just doing it his way. 00:48:58.860 --> 00:49:03.462 - Which is to say, kind of more intermittent. We do it when it's 00:49:03.462 --> 00:49:04.878 - needed kind of thing. 00:49:05.940 --> 00:49:10.122 - Yeah, well it it in so if I need it in the middle of a spring I 00:49:10.122 --> 00:49:13.320 - would just say hey I need these five tickets for Seaford done as 00:49:13.320 --> 00:49:16.272 - soon as possible so we can deploy them because I have a 00:49:16.272 --> 00:49:19.470 - meeting in this day and I want to make sure it's tested before 00:49:19.470 --> 00:49:20.700 - we give it to him. 00:49:21.770 --> 00:49:27.454 - OK, so it's just purely on need now Clint, you this week to set 00:49:27.454 --> 00:49:32.326 - it just have kind of a weekly standing deployment and it's on 00:49:32.326 --> 00:49:35.574 - Mondays before the Wednesday meeting. Is that correct? 00:49:36.970 --> 00:49:42.729 - So I said a weekly reminders on my calendar and the The Dev's 00:49:42.729 --> 00:49:44.501 - calendar just as a. 00:49:45.960 --> 00:49:49.960 - You know, we know collectively 00:49:49.960 --> 00:49:54.351 - if. There is anything in a pull request 'cause what I've been 00:49:54.351 --> 00:49:58.004 - stung by is I've been working on a lot of projects where it's 00:49:58.004 --> 00:50:01.095 - just been me and either one or two other developers, and 00:50:01.095 --> 00:50:04.748 - usually in that case, and this is kind of just been how pod 00:50:04.748 --> 00:50:05.872 - bees operating once something 00:50:05.872 --> 00:50:11.660 - has been. Quit being a pull request improved. 00:50:12.190 --> 00:50:14.010 - Usually that person is just 00:50:14.010 --> 00:50:18.088 - deployed it. Uh, without waiting and I understand for bigger 00:50:18.088 --> 00:50:21.292 - projects that's not reasonable, so going forward, these bigger 00:50:21.292 --> 00:50:25.920 - projects and with a lot of Devs working on it, I've set weekly 00:50:25.920 --> 00:50:29.480 - reminders. That doesn't mean that every single week we need 00:50:29.480 --> 00:50:33.752 - to deploy, it's a reminder more so for myself than anything to 00:50:33.752 --> 00:50:38.024 - check in on those because I was getting burns not knowing that 00:50:38.024 --> 00:50:39.448 - code wasn't getting deployed. 00:50:40.140 --> 00:50:44.970 - Uh, and in a lot of it's just ignorance on my own part, but I 00:50:44.970 --> 00:50:48.512 - didn't know code wasn't getting deployed. So then the day before 00:50:48.512 --> 00:50:53.342 - and the day of I needed getting, I need it to be deployed and or 00:50:53.342 --> 00:50:57.206 - other team members are working on DFO and they don't know that 00:50:57.206 --> 00:51:01.392 - code needs to be deployed. So it's just kind of a reminder for 00:51:01.392 --> 00:51:04.934 - myself more than anything. Yeah, definitely let me know if you 00:51:04.934 --> 00:51:07.510 - guys can get to it up here is 00:51:07.510 --> 00:51:14.320 - swindled life. OK, now what is a container. It container is a 00:51:14.320 --> 00:51:21.236 - US server, it's it's like a VM, but it's not a VM. It's 00:51:21.236 --> 00:51:27.088 - literally like here. Let me pull up a diagram, hang on. 00:51:27.090 --> 00:51:30.695 - Then let me help a container. It 00:51:30.695 --> 00:51:36.926 - is a. Area it that contains all the necessary services and 00:51:36.926 --> 00:51:40.524 - registry settings and configurations that a live 00:51:40.524 --> 00:51:46.178 - server an application would have to run that environment so it 00:51:46.178 --> 00:51:52.346 - container wraps it all up in a nice package that can run 00:51:52.346 --> 00:51:57.638 - independent. Of the underlying hardware, meaning I can put it 00:51:57.638 --> 00:52:03.774 - on a any Windows Server and it should run as long as it's 00:52:03.774 --> 00:52:06.134 - running Docker. Yeah it makes 00:52:06.134 --> 00:52:10.440 - it. And, uh, you know there's other containers out there. A 00:52:10.440 --> 00:52:15.036 - Docker is is in most peoples head space like it is literally 00:52:15.036 --> 00:52:17.334 - like the best one out there. 00:52:18.850 --> 00:52:21.634 - It is like VM Ware. Yeah, 00:52:21.634 --> 00:52:24.636 - except. Virtualization products that VM Ware is the standard 00:52:24.636 --> 00:52:29.074 - here. Let me know where there is a about to show a really good 00:52:29.074 --> 00:52:31.293 - diagram here. Let me see if I 00:52:31.293 --> 00:52:35.436 - can find it. Using my Garrett skill citizen stop things in 00:52:35.436 --> 00:52:38.206 - their tracks. What are you talking about? Hold on what's 00:52:38.206 --> 00:52:39.037 - the VM Ware? 00:52:40.900 --> 00:52:46.840 - OK, here you guys go let me pull this image up. Uh, hang on, I'll 00:52:46.840 --> 00:52:51.196 - show you guys something real quick. This is kind of cool. 00:52:51.196 --> 00:52:55.552 - Alright so the screen if you guys can see this so. 00:52:56.370 --> 00:52:58.986 - You have your infrastructure. This is typical virtualization 00:52:58.986 --> 00:53:03.237 - which has been real popular up until like the last few years as 00:53:03.237 --> 00:53:07.161 - containers that I'm going to stop you for a second. We gotta 00:53:07.161 --> 00:53:09.450 - hand up from Sam Sam, what's up? 00:53:09.450 --> 00:53:14.210 - It could wait. I was just gonna ask Siri of like all these terms 00:53:14.210 --> 00:53:17.610 - that we keep dropping. 'cause That's been my biggest problem 00:53:17.610 --> 00:53:19.310 - with following along. Is that 00:53:19.310 --> 00:53:24.130 - just jargon? Totally like if it doesn't exist. I'd be happy to 00:53:24.130 --> 00:53:28.438 - start working on it and putting it together, but I would welcome 00:53:28.438 --> 00:53:32.746 - the acronym. Hell yeah, I think that's a great call, Sam. So 00:53:32.746 --> 00:53:36.336 - let's just quick pull out something you have a notepad 00:53:36.336 --> 00:53:40.644 - ready? Yeah, let me know. Let's just give some real quick high 00:53:40.644 --> 00:53:47.751 - level ones. Go back the ones that we were 00:53:47.751 --> 00:53:51.766 - starting with their so ISCICD. 00:53:53.560 --> 00:53:59.160 - Yep, VM Ware VMware. 00:54:00.260 --> 00:54:05.165 - And then I just want you to flat out stop and I will too, but 00:54:05.165 --> 00:54:09.089 - just stop this train anytime a new one comes up. That's the 00:54:09.089 --> 00:54:13.340 - only way you're going to get it. And it mean to everyone else 00:54:13.340 --> 00:54:17.264 - here. and I guarantee you that some of these acronyms will just 00:54:17.264 --> 00:54:21.188 - kind of let pass by us. Sometimes we go figure it out, 00:54:21.188 --> 00:54:25.766 - but stop it in its tracks and let's figure it out. So then one 00:54:25.766 --> 00:54:29.690 - thing you might want to bring it to. The difference between a 00:54:29.690 --> 00:54:30.998 - server and virtual server. 00:54:31.070 --> 00:54:35.126 - In a container, they all operate at different levels of the OS, 00:54:35.126 --> 00:54:37.492 - eye layer layer. Oh, it's I who. 00:54:38.330 --> 00:54:41.048 - Exactly what's OSI? 00:54:41.940 --> 00:54:47.988 - That I would have to look up. It's been so long. Would it be 00:54:47.988 --> 00:54:49.284 - operating system infrastructure? 00:54:49.290 --> 00:54:52.950 - Uh, I don't remember what. 00:54:53.800 --> 00:54:57.408 - There's Seven layers to OS I, oh cool. 00:54:58.910 --> 00:55:01.462 - Open systems interconnection, open 00:55:01.462 --> 00:55:05.928 - systems interconnection, and your first layer layer 00:55:05.928 --> 00:55:11.670 - one is physical. That is, the hardware layer. The 00:55:11.670 --> 00:55:18.050 - actual server where it is in the processor you have 00:55:18.050 --> 00:55:23.154 - the data layer, which is the Ethernet adapter. 00:55:24.220 --> 00:55:27.400 - And you've got the network layer 00:55:27.400 --> 00:55:33.916 - OK. And after the network layer you have the transport. 00:55:35.000 --> 00:55:38.300 - Session. Yes, I'm model. 00:55:38.810 --> 00:55:41.066 - That's why I just said, Yeah, 00:55:41.066 --> 00:55:44.855 - it's awesome. But what are you? What are you? I don't 00:55:44.855 --> 00:55:47.880 - know. If you heard the the difference. We have a server 00:55:47.880 --> 00:55:50.630 - virtual server in a container. They all run at different 00:55:50.630 --> 00:55:52.280 - levels of the OS eye layer. 00:55:55.450 --> 00:55:56.140 - OK. 00:55:57.410 --> 00:56:04.850 - It's pretty deep in the weeds on that it is, but I 00:56:04.850 --> 00:56:08.570 - was just trying to point it 00:56:08.570 --> 00:56:13.745 - out. Uh, basically, uh, this diagram, though here, um, this. 00:56:13.745 --> 00:56:19.300 - This kind of helps explain the difference. So you have your 00:56:19.300 --> 00:56:22.835 - infrastructure and then typically like in machine 00:56:22.835 --> 00:56:26.875 - virtualization, you'll have a hypervisor running which would 00:56:26.875 --> 00:56:29.905 - be like hyper V or VirtualBox 00:56:29.905 --> 00:56:34.491 - or. A VM Ware VM Ware player, uh, those those are all 00:56:34.491 --> 00:56:38.101 - hypervisors and then um within that hypervisor you'll have a 00:56:38.101 --> 00:56:41.711 - bunch of operating systems and then you'll have your. Typically 00:56:41.711 --> 00:56:46.765 - you'd have one OS per app, right? So the new way to do it 00:56:46.765 --> 00:56:50.375 - is you have an operating system with the container engine 00:56:50.375 --> 00:56:55.068 - running, and then you can just build all your apps on top of 00:56:55.068 --> 00:56:59.761 - that in containers and it uses hyper V. Here's an example of a 00:56:59.761 --> 00:57:03.468 - hypervisor. This is a hypervisor, UM, in case none of 00:57:03.468 --> 00:57:07.212 - you have ever seen it, this is clarity's, backbone. This is our 00:57:07.212 --> 00:57:10.956 - hypervisor really are all of our servers guys. I just rebooted a 00:57:10.956 --> 00:57:14.700 - machine for KB so you guys get the privilege of seeing this. 00:57:14.700 --> 00:57:19.068 - This is right away from do not get on this machine. This is how 00:57:19.068 --> 00:57:23.436 - I screwed. Yeah, I like I was in a VM and I accidentally modified 00:57:23.436 --> 00:57:27.492 - these networks in here which is not a good thing anyway. So we 00:57:27.492 --> 00:57:31.236 - got that fixed but same thing here like so I have this 00:57:31.236 --> 00:57:33.108 - hypervisor on virtual a. This is 00:57:33.108 --> 00:57:35.434 - literally. Our virtual infrastructure. We have one 00:57:35.434 --> 00:57:38.350 - physical machine with multiple virtual servers. Dev Force One 00:57:38.350 --> 00:57:41.266 - is virtual. They're not physical machines, they're using the 00:57:41.266 --> 00:57:45.154 - hardware off of our server and we just divvy out the hardware 00:57:45.154 --> 00:57:49.042 - to all these different servers and we have a total hardware, so 00:57:49.042 --> 00:57:53.578 - we've got a ton of servers. Same thing like this is on my local 00:57:53.578 --> 00:57:56.818 - machine. This is my hypervisor that have been playing around 00:57:56.818 --> 00:58:00.382 - with, so I've gotta Kubernetes master server. And then I've got 00:58:00.382 --> 00:58:03.946 - it. Kubernetes is ties in with Docker, it's another way of 00:58:03.946 --> 00:58:06.862 - doing Kubernetes is the deployment master. It's how you 00:58:06.862 --> 00:58:08.482 - do all your automation and. 00:58:08.500 --> 00:58:13.060 - Everything that is part of what I'm going to bring in. I'm 00:58:13.060 --> 00:58:18.000 - trying to get it viable for us to use with Azure, because, um, 00:58:18.000 --> 00:58:22.180 - it, it's it's the most popular, uh, an it's completely Federated 00:58:22.180 --> 00:58:27.120 - so I can connect any machine to any of my nodes. You basically 00:58:27.120 --> 00:58:29.020 - are creating a cluster of 00:58:29.020 --> 00:58:32.712 - servers and. When you're done, I do see Sam's hand is back up, so 00:58:32.712 --> 00:58:33.909 - it finished up and then we'll go 00:58:33.909 --> 00:58:38.714 - into Sam there. Is that explanation? Yeah, no, I just. 00:58:38.720 --> 00:58:42.040 - Prince between there. So like I mean basically virtualization is 00:58:42.040 --> 00:58:45.028 - you're taking the hypervisor and you're creating these operating. 00:58:45.028 --> 00:58:48.016 - You're creating an actual physical machine like that is 00:58:48.016 --> 00:58:51.668 - literally what these are. I don't have it running, but here 00:58:51.668 --> 00:58:55.652 - I'll just launch this one and you guys can see what happens. 00:58:55.652 --> 00:58:59.968 - So it pulls this up. I'm going to start the machine and what 00:58:59.968 --> 00:59:01.628 - you'll see is it starting. 00:59:06.160 --> 00:59:09.730 - And this is a, uh. 00:59:09.730 --> 00:59:13.790 - This is a Windows box, so boom there it is. That is a Windows 00:59:13.790 --> 00:59:17.560 - machine. And just like on our network this is the back end of 00:59:17.560 --> 00:59:21.620 - Dev Force One. So I come in here and connect to this and Force 00:59:21.620 --> 00:59:25.970 - One is running that is Dev Force One right there so I can do a 00:59:25.970 --> 00:59:28.000 - control alt delete and I can log 00:59:28.000 --> 00:59:33.202 - in. To death Force One. Now don't do it this way, I'm just 00:59:33.202 --> 00:59:36.812 - showing you like this is literally the backbone of our 00:59:36.812 --> 00:59:41.505 - network. Just like I can sit here on my machine and I can 00:59:41.505 --> 00:59:46.198 - build out this virtual network per say, like I can put in a 00:59:46.198 --> 00:59:49.447 - domain controller. Everything on here and have all these 00:59:49.447 --> 00:59:52.335 - different servers and they're all. It's all just 00:59:52.335 --> 00:59:55.945 - virtualization. So then where the containers come in is you're 00:59:55.945 --> 00:59:59.555 - just taking one machine and you're running all of your 00:59:59.555 --> 01:00:02.980 - applications. Uh, on a single machine and those applications 01:00:02.980 --> 01:00:06.355 - that are running in those containers, they just think 01:00:06.355 --> 01:00:10.480 - they're in their own server. They don't realize that they are 01:00:10.480 --> 01:00:14.700 - running. Inside of a container on another server, I mean these 01:00:14.700 --> 01:00:19.016 - are like all bare bones stuff, it just runs on a server that 01:00:19.016 --> 01:00:23.000 - has nothing installed on it but Docker, and so that's the most 01:00:23.000 --> 01:00:24.660 - remarkable thing to be so. 01:00:25.270 --> 01:00:28.630 - This is a question slash, maybe hopefully the leading question 01:00:28.630 --> 01:00:32.662 - that gets everyone a lot more excited for this. What is what 01:00:32.662 --> 01:00:37.702 - does this do for us to pull down a local? So from now on it's 01:00:37.702 --> 01:00:42.070 - pulling down a lot so you know how developers have to set up 01:00:42.070 --> 01:00:46.102 - all this software right every time an the software has to be 01:00:46.102 --> 01:00:49.126 - certain versions. That's why James Gray has a specific 01:00:49.126 --> 01:00:51.814 - walkthrough says go here download this install this 01:00:51.814 --> 01:00:54.838 - version 'cause we have to have consistent versions wearing 01:00:54.838 --> 01:00:56.518 - their coding on their local. 01:00:56.580 --> 01:01:00.133 - Anyway, with what this does is basically, uh, what udev would 01:01:00.133 --> 01:01:04.009 - do is they take their machine out of box. They would install 01:01:04.009 --> 01:01:07.562 - Docker and then they would build out there. They could either 01:01:07.562 --> 01:01:11.115 - pull down an already prebuilt image or they can build a 01:01:11.115 --> 01:01:14.022 - dockerfile and put all of their dependencies and everything 01:01:14.022 --> 01:01:17.898 - inside that dockerfile so that like you can build an image from 01:01:17.898 --> 01:01:22.097 - that and so setting up a local is just as simple as installing 01:01:22.097 --> 01:01:25.650 - docker and then once Dockers installed they would come to the 01:01:25.650 --> 01:01:29.170 - command line and. I'll just, I'll just show you guys 'cause 01:01:29.170 --> 01:01:33.820 - this is really cool, so uhm, I can come in here where I did my 01:01:33.820 --> 01:01:35.370 - DNN dockerized bit and um. 01:01:36.890 --> 01:01:40.630 - Basically so you can. I stop here real quick, just seeing 01:01:40.630 --> 01:01:45.390 - everybody it looks like there's a DNS mix up, so if you have any 01:01:45.390 --> 01:01:49.130 - clients that are currently on a hosted by clarity, you might 01:01:49.130 --> 01:01:53.210 - check their sites real quick just to make sure that they are 01:01:53.210 --> 01:01:56.610 - up and running things. That's why it's there, Kevin is. 01:01:57.400 --> 01:02:03.130 - Maybe? So I had one client that was down and then they 01:02:03.130 --> 01:02:07.030 - called and I've just been let's back up and they should be good 01:02:07.030 --> 01:02:10.930 - to go. Crack had a bunch of outages too. I just wanted to 01:02:10.930 --> 01:02:14.830 - make sure that if you have a client that is hosted on clarity 01:02:14.830 --> 01:02:18.430 - that I you know to look for it and check that out. 01:02:19.650 --> 01:02:20.838 - OK, OK bill. 01:02:21.770 --> 01:02:24.938 - Everything I need is in this dockerfile that already so I 01:02:24.938 --> 01:02:28.394 - defined the environment and this is all it would be for building 01:02:28.394 --> 01:02:32.138 - a local, like if they want to come, just go out of box, 01:02:32.138 --> 01:02:35.306 - starting from scratch. You can do that, or if you're pulling 01:02:35.306 --> 01:02:38.186 - down an image like something that's already been working on, 01:02:38.186 --> 01:02:42.218 - you can just do Docker pull and then the name of the image and 01:02:42.218 --> 01:02:46.538 - pull it down. But in this case I just want to build a new image, 01:02:46.538 --> 01:02:50.570 - so I'm going to say Docker build and I'm going to do dot slash 01:02:50.570 --> 01:02:53.738 - Dockerfile and I'm going to build it in this directory so. 01:02:53.800 --> 01:02:57.815 - That is going to run that Dockerfile and it's going to 01:02:57.815 --> 01:03:02.560 - build an image. It's going to build an image that I can then 01:03:02.560 --> 01:03:05.820 - run. Wait a minute. what I do wrong, uh? 01:03:09.710 --> 01:03:10.260 - Old. 01:03:11.400 --> 01:03:14.130 - No, no, uh. 01:03:14.900 --> 01:03:16.370 - OK um. 01:03:19.480 --> 01:03:23.498 - Have to do dash F for file. I didn't indicate that it was a 01:03:23.498 --> 01:03:27.516 - file, so now it's going to run it so it's going to go through 01:03:27.516 --> 01:03:30.960 - all these different 13 steps in there like I built out that 01:03:30.960 --> 01:03:33.830 - dockerfile an it's so it's pulling down the. NET Framework 01:03:33.830 --> 01:03:37.848 - and now it's going to go through line by line. what I showed you 01:03:37.848 --> 01:03:41.005 - guys initially so once this gets done downloading it's going to 01:03:41.005 --> 01:03:44.162 - install all the dependencies and everything and then I have an 01:03:44.162 --> 01:03:48.180 - image. Once that images on my local I just run the image and I 01:03:48.180 --> 01:03:49.615 - can develop inside of it. 01:03:49.650 --> 01:03:54.228 - And when I make my changes then I can commit. Uhm, I can commit 01:03:54.228 --> 01:03:58.479 - that image as the latest version or I can tag it is something 01:03:58.479 --> 01:04:00.441 - else. I can tag it as. 01:04:00.460 --> 01:04:04.786 - You know naming the feature that I built. I can tag it is, uh, 01:04:04.786 --> 01:04:07.876 - built, you know, whatever you, it uses a tagging, tagging 01:04:07.876 --> 01:04:10.966 - methods so, but essentially you just commit your changes just 01:04:10.966 --> 01:04:14.056 - like normal. Except every things inside of containers so that 01:04:14.056 --> 01:04:17.764 - whenever you go to deploy it, all you're doing is deploying an 01:04:17.764 --> 01:04:21.163 - image and that image is going to run exactly the same. 01:04:22.110 --> 01:04:25.575 - Everywhere, uh, as long as it has docker installed, you don't 01:04:25.575 --> 01:04:28.410 - need any other dependencies, just a barebone server with 01:04:28.410 --> 01:04:31.245 - Docker installed and that's that's so amazing. Yeah, it's 01:04:31.245 --> 01:04:34.080 - it's freaking amazing, so everything I just showed you 01:04:34.080 --> 01:04:38.978 - guys. Like this is one way to do a local, so this this one 01:04:38.978 --> 01:04:42.038 - is me building at DNN instance from scratch. Running this 01:04:42.038 --> 01:04:45.404 - dockerfile and then I'll have the image locally that I can 01:04:45.404 --> 01:04:46.322 - start developing with. 01:04:47.340 --> 01:04:51.227 - 'cause we've been told the stake center from what an hour and a 01:04:51.227 --> 01:04:54.516 - half to four hours sometimes right? Yeah, this this this as 01:04:54.516 --> 01:04:58.403 - soon as this is done, I've got my local pulled down. It'll be 01:04:58.403 --> 01:05:02.589 - an image that I can just run and then I can execute whatever I 01:05:02.589 --> 01:05:06.476 - want inside of it. You all saw how I executed IP config earlier 01:05:06.476 --> 01:05:10.363 - and I saw the IP address of the container. You can also run 01:05:10.363 --> 01:05:13.951 - PowerShell or command and you'll get a command prompt. You can go 01:05:13.951 --> 01:05:16.941 - directly inside the container and work from within there you 01:05:16.941 --> 01:05:20.875 - can. You can also develop everything locally, like in this 01:05:20.875 --> 01:05:24.895 - content folder and then you can run your dockerfile to bring in 01:05:24.895 --> 01:05:28.915 - all your changes and you could just build a brand new image. 01:05:28.915 --> 01:05:33.270 - That way there's a couple ways to do it, but it's it's all 01:05:33.270 --> 01:05:35.615 - about containerization and simplifying deployments. So so 01:05:35.615 --> 01:05:39.300 - then all the deployment would be once it's automated with the 01:05:39.300 --> 01:05:40.975 - pipeline will be pushing the 01:05:40.975 --> 01:05:43.676 - image up. Um, triggering the 01:05:43.676 --> 01:05:48.718 - pull request. And it it would just automatically go through 01:05:48.718 --> 01:05:53.129 - whatever setups we have set up in our automation for that 01:05:53.129 --> 01:05:54.733 - pipeline, which that's what. 01:05:55.300 --> 01:05:59.920 - I'm starting to get into the weeds of uhm, so I don't have a 01:05:59.920 --> 01:06:01.900 - whole lot of knowledge there yet 01:06:01.900 --> 01:06:06.652 - guys. Real quick then yeah, I I'm just looking at this point. 01:06:06.652 --> 01:06:10.672 - Yeah, local should take no longer than two hours to 01:06:10.672 --> 01:06:14.300 - download. How many times is you been told otherwise by someone 01:06:14.300 --> 01:06:17.693 - or when they have it? Every time that I have anyone that's like, 01:06:17.693 --> 01:06:20.825 - Oh yeah, this is gonna take a little bit longer to download 01:06:20.825 --> 01:06:24.218 - this local like OK, I need a document saying why this took so 01:06:24.218 --> 01:06:27.611 - long and then added to the wiki to make sure that people know 01:06:27.611 --> 01:06:30.743 - how to do this. It needs to be added to stackoverflow. Should 01:06:30.743 --> 01:06:33.875 - make sure this doesn't happen in the future sure thing, but Can 01:06:33.875 --> 01:06:36.746 - you imagine if we went from 2 hours to 20 minutes? 01:06:37.850 --> 01:06:41.337 - It would be fantastic. Yes, I just I wanted to address 01:06:41.337 --> 01:06:45.141 - that. If you have people that are saying 4 hours for local, 01:06:45.141 --> 01:06:47.677 - that's that's an issue. Very good, thank you. 01:06:49.470 --> 01:06:50.380 - Very true. 01:06:52.890 --> 01:06:56.550 - It gives you some really cool information on here like this is 01:06:56.550 --> 01:06:59.905 - all pulling down, a local is right. It's all automated. Like 01:06:59.905 --> 01:07:03.260 - once I run the Docker build process that all the build 01:07:03.260 --> 01:07:06.920 - details are in this file, which just again that is this, it's 01:07:06.920 --> 01:07:08.140 - just running through this 01:07:08.140 --> 01:07:13.202 - script. Um? And so by the time it's done, they'll be an image 01:07:13.202 --> 01:07:15.958 - there that I can run, and that's it. I can start developing on 01:07:15.958 --> 01:07:21.306 - it. And that's what I'm hoping to get our team towards is to 01:07:21.306 --> 01:07:26.598 - get them to wear like they don't have to install a whole bunch of 01:07:26.598 --> 01:07:30.756 - software on their machines. They can just install Docker and get 01:07:30.756 --> 01:07:34.914 - and they can push and pull. It will images and independent 01:07:34.914 --> 01:07:39.450 - files like. So I would use git to push these dependencies up 01:07:39.450 --> 01:07:43.986 - into a repo and then I would register my image with the 01:07:43.986 --> 01:07:47.388 - docker hub and those two are integrated together so. 01:07:47.400 --> 01:07:51.348 - To actually like get started, I would run a git pull or a git 01:07:51.348 --> 01:07:54.732 - clone actually and I would clone the repository down to my local 01:07:54.732 --> 01:07:58.116 - machine so I'd pull all these files down and then I would 01:07:58.116 --> 01:08:01.218 - build the image from the dockerfile. Or if the image is 01:08:01.218 --> 01:08:05.166 - already built and ready to go in docker hub, I can just do a 01:08:05.166 --> 01:08:08.832 - docker pull and I can pull the image down from Docker and run 01:08:08.832 --> 01:08:12.498 - it and I can get the dependency files built out on my machine 01:08:12.498 --> 01:08:16.164 - the way that I want him. Like if you're customizing then you just 01:08:16.164 --> 01:08:18.984 - you'd have your content folder. You can have your database. 01:08:19.000 --> 01:08:22.380 - Everything right there, um. Right now I'm using an Azure 01:08:22.380 --> 01:08:26.436 - database because it's persistent and it's in the web and I can 01:08:26.436 --> 01:08:29.816 - link it up from multiple sources. But eventually what I'm 01:08:29.816 --> 01:08:34.210 - going to do is I'll have like a docker compose Yaml file here 01:08:34.210 --> 01:08:38.604 - that when you do docker compose up, it'll run this yaml file and 01:08:38.604 --> 01:08:42.660 - what it does is it will allow you to take multiple containers 01:08:42.660 --> 01:08:46.716 - and join them together. So that's how I would build out the 01:08:46.716 --> 01:08:50.096 - DN instance first, then it would build my SQL instance. 01:08:50.150 --> 01:08:53.610 - It would set up my persistent data volumes, which are 01:08:53.610 --> 01:08:57.070 - basically just so that if the container does failure, not 01:08:57.070 --> 01:09:00.530 - losing your database, so that would be stored externally from 01:09:00.530 --> 01:09:03.644 - the container, but you would basically have everything you 01:09:03.644 --> 01:09:07.796 - need right there, and as soon as you run that Docker compose 01:09:07.796 --> 01:09:11.256 - file, you're going to have your DNA in instance, you're 01:09:11.256 --> 01:09:15.062 - automatically going to have it linked up to the database that 01:09:15.062 --> 01:09:19.560 - you spun up, and that can be modified. It at Will, and then 01:09:19.560 --> 01:09:21.290 - the changes can be committed. 01:09:21.350 --> 01:09:24.330 - And once they're, you know they're committed. They can be 01:09:24.330 --> 01:09:27.906 - reviewed if they are approved, they can be deployed to the next 01:09:27.906 --> 01:09:30.588 - environment and it's all automated. It will be all 01:09:30.588 --> 01:09:34.111 - automated. Fascinating, you can do it manually too. I mean, 01:09:34.111 --> 01:09:36.801 - that's what I've been doing. I've been just playing around 01:09:36.801 --> 01:09:39.760 - with it manually because I want to get intimately familiar with 01:09:39.760 --> 01:09:42.988 - this first so that it will make setting up the pipeline that 01:09:42.988 --> 01:09:44.871 - much more easier incomprehensible for me. I'm 01:09:44.871 --> 01:09:48.099 - still trying to wrap my head around a lot of the little 01:09:48.099 --> 01:09:51.327 - nuances there, but I do have this like I've got the high 01:09:51.327 --> 01:09:54.286 - level overview, so I'm just trying to get like into the 01:09:54.286 --> 01:09:56.169 - weeds of how do we actually do 01:09:56.169 --> 01:10:00.226 - this now, right? I got the Docker bit down, um, I'm diving 01:10:00.226 --> 01:10:04.474 - into the Kubernetes UM, which is all the Kubernetes is all about 01:10:04.474 --> 01:10:08.014 - deployments, literally it. It ties in with Dockers so nicely 01:10:08.014 --> 01:10:12.616 - because you can take a completed Docker image and then I can come 01:10:12.616 --> 01:10:14.386 - in and I can say. 01:10:14.430 --> 01:10:17.706 - Mini cube space deploy space and I create a deployment out of 01:10:17.706 --> 01:10:20.982 - that image and then I execute that deployment an it runs and 01:10:20.982 --> 01:10:23.985 - then I can actually create scripts that take all of these 01:10:23.985 --> 01:10:27.807 - steps that I'm doing right here and make it to where all the dev 01:10:27.807 --> 01:10:31.629 - has to do is come in and execute a script and it does everything 01:10:31.629 --> 01:10:34.905 - so it's just like a single click. It will install like if 01:10:34.905 --> 01:10:38.181 - it's the first time build you can have a first time build 01:10:38.181 --> 01:10:41.457 - script that would first go out and grab Docker and install it 01:10:41.457 --> 01:10:44.733 - and then it's going to reboot your machine and it's going to 01:10:44.733 --> 01:10:47.736 - finish running the rest of the script. That's going to build 01:10:47.736 --> 01:10:51.570 - out. Whatever instance you're trying to build, my plan is to 01:10:51.570 --> 01:10:56.835 - have one, four out of box DNN, and out of box F, and then will 01:10:56.835 --> 01:11:00.345 - be maintaining that going forward so that you know having 01:11:00.345 --> 01:11:05.259 - taking two hours to build a local is going to be a thing of 01:11:05.259 --> 01:11:07.716 - the past at some point in the 01:11:07.716 --> 01:11:10.350 - future. Thanks, Ben. 01:11:10.880 --> 01:11:11.710 - Um?