Welcome to our course on Continuous Integration. You're taking this course probably because you're already acutely aware that software development and in this day and age is highly complex. You often have large teams of developers working on small parts of an overall software project. These teams are submitting new and revised bits of code multiple multiple times throughout a work day, and in the case of especially large international organizations, sometimes around the clock. If you look at some of the major platforms on the Internet, the Amazons, YouTubes, Googles, Facebooks of the world, code is being worked on and combined constantly to improve those platforms. There's one thing that's preventing all of this coding effort devolving into utter chaos, and that's continuous integration. Hello. My name is Edward Raigosa, and I'm a principal software engineer working on continuous integration solutions at GitHub. I was first introduced into continuous integration systems at scale over 15 years ago. While working in various roles, I have had the opportunity to be involved in creating countless systems of automation that have helped organizations improve their overall ability to deliver software. Some of my most exciting work has been around DevOps projects and talks that I've given where I have described techniques around using solutions like Docker, Jenkins, and Kubernetes. This is because doing automation as scale is now more than ever achievable for software development teams, and continuous integration is at the heart of it. In this course, we're going to go over basic principles of using continuous integration systems effectively. We're going to discuss the basic functions and purpose of a CI system. We'll talk about the conversion of code to artifacts, verification of code and systems to improve security. We'll discuss how important DevOps principles of fast feedback, defining flow, chunking work, and collaborative work within automated feedback fit into continuous integration. We'll go over how we can manage and organize our ability to produce reliable, repeatable, and reusable builds. We'll introduce the concept of webhooks and how we can leverage other tools through APIs and other beans to work with continuous integration tools. Using continuous integration solutions can mean the difference between waiting minutes versus hours for feedbacks on changes that your software developers are making to your software asset. You will learn about how continuous integration can provide faster feedback loops and higher understanding of changes that are being made to your software. Above all, you will learn how continuous integration can create confidence for your software development team, empowering the team to deliver changes faster than ever before. To accomplish all of this, we'll also introduce you to one of the more popular continuous integration platforms, Travis CI. As you follow along in the video lessons and complete the activities, you'll get your hands dirty with Travis CI directly, applying the concepts you're learning in our lessons together to solve real-world problems. We're going to wrap this course with a project created specifically to help learners use continuous integration techniques. The exercise will test your skills obtained for working on schedules for setting up execution events for push or nightly builds. You will use Docker to automate some of our continuous integration steps that help verify the exercise and achieve the configuration needed to meet the requirements of the software project will provide. You will solve some common error handling issues that will arise in the exercise, and will secure sensitive information to avoid exposing your projects passwords. Then, you will use flow control to achieve verification of the software project we provide in this exercise. Finally, you will publish finished artifacts as a part of the hand-off for continuous delivery and demonstrate how the traceability and notifications were set up for creating collaboration needed to help achieve traceability and notifications for your team. Of course, continuous integration is just one part of approaching development effectively utilizing DevOps principles. If you want to learn even more, I encourage you to check out the entire UC Davis DevOps specialization if you haven't already. This course is a part of the specialization, and my colleagues have done an excellent job of covering the many facets of DevOps. Before taking this course, you should already know at least one programming language. It doesn't really matter what language, just that you're comfortable using one, and you should be familiar with basic programming of code and using a shell prompts such as Bash. You'll also need to have an account set up on GitHub and Travis CI to perform most of the exercises in this course. Both services are available for free, and students can also apply for additional freebies through GitHub's Student Developer Pack at the education GitHub link we've provided in this video. Use the link to set up your GitHub account and Travis account if you have not already done so. Similarly, you can find Travis CI at travis-ci.org. As a developer, you should also have access to a text editor for software development such as the Atom IDE available on atom.io or Visual Studio IDE available at visualstudio.microsoft.com. You will also want to install the latest version of Docker for your operating system available at docs.docker.com/install. We will be publishing some Docker images in some of our exercises. So, it's highly recommended that you set up a free account for Docker's public registry at hub.docker.com. All of these links I've mentioned are available on the Getting Started page in this introductory module. In order to be successful in this course, I highly encourage you to watch and do everything in the order its presented. Most of the concepts I discuss build upon one another, and so it's a good idea to have a firm grasp of one topic before moving on to the next topic. All right. Once again, welcome. I'm really excited about this course, and I'm glad you've joined me, because we're going to learn a lot together. Let's get started.