So our first exercise will have us go back to Atom. So if we open the Atom editor and we choose the branch that we started with, master_docker, and you pull the latest changes from GitHub to refresh your local repository. So you should have a little fetch icon here. You can just click on that icon. It'll refresh. If it says there's two pull request emerge, go ahead and click on that icon one more time. So the next step is let's go look at travis.yml file, and we should see the work that we did from the three Rs where we specified services tagged to include Docker and then we added two phases. One is that before install with two steps in it, and a script phase with one step in it, that ran our npm run test. So if we go back and look at the Docker file, we should also have that and that looks good on my side. So in this exercise, let's open up the GitHub desktop, and start a new branch. So we're going to click on the current branch and choose new branch. We'll base the new branch off to master_docker branch and we're going to call this exercise module2_step1. Actually let's use example1, and create the branch. Okay. So now we should start in a new branch. So if you notice here the before install phase, actually doesn't have an installed phase. What would be really nice is if we pulled the image first before we installed anything with the image, and then tag the image in an install phase. So let's separate these two things into two different phases. So we'll leave the before installed just as is, and we'll add a new phase called install. Install phase is in the travis.yml file can help us with preparing the virtual machine or the container image with any prerequisites that we might need for the script step. In the scripts step, you can then reliably execute any commands using the install phases results. So for example, in this case, we pulled a Docker image called node:8-onbuild, and then we use the install command to tag that Docker, or to build that Docker image, and tag it with the probot hello world or hello tag. So that means that in any of the script phases that we have, we can now reliably say, "Hey, we want to use that probot-hello tag to run any of our commands. So just for fun, we know that this particular project has a package.json that has some additional targets in it. We're going to add another target in here, and use the probot image again. This time instead of tests, we're going to run a link command. A link command helps us check for syntax errors, syntax mistakes in our code, and we can use Node to do that for us. So let's save it at this point, and then we're going to commit these changes. So let's go back to the GitHub desktop, and we can see that we made just a few changes. This is example one adding some additional phases, and let's commit that, and then let's publish it. So once this is published, we can go back to the website on travis.org and we can look for any of our changes. One thing I want to make a note here is that if under more options, if you're making edits to your travis.yml file and you're making mistakes, you can always go to more and choose requests and look for syntax checks that are occurring on branches that you're pushing up. So here we saw that the module two example is checking out okay and doesn't have any syntax errors. If you look at some of this here, we can see that if we make syntax errors then, Travis is going to pick that up for us. So now we're building this project and the example1 is building. So let's take a closer look at the build. If we look at the view config, we can see now that there's an install phase with the Docker build command, and there's a before install phase where we pull the image that is used in this Docker build command. Then in the script phase, we now have two steps. One to do an npm run test and one to do an npm run lint. Now, Docker will treat this as a sink, or Travis will treat this as a single job, there will only be one job for this particular build. It will have two steps in the script that we execute. It actually has these two additional steps that are in two different phases. One is the before installed phase and the others in the install phase. Now, if we look at the job log, we'll see arrows that indicate the start of some of the work for compiling our Docker image. We can see the Docker pull is successful. So we downloaded a new Docker note image with the Docker pull command, and we can see that the Docker build command is now running. This will take a few minutes to run to completion. So we'll pause the video here, and we'll look at the final results when we're done. Okay, so the build is done, and we can actually look at the tests here. It looks like test suites, one passed, one total run, and it shows we have two tests that passed and two total runs. We can also see that the npm run lint command worked for us and that exited to zero. So what did we cover? We covered phases, we talked about the big four install phase, the install phase, and the script phase, and we also did multiple steps within a single phase, and we saw that with the script phase.