 My name is Surya Gaddyapati, and I'm a higher-order tool staff at Groupon. I basically made that job title up because DevOps. So one of my professional interests is continuous integration, so that's what I'm going to be talking about. So this is how CI looks. Like it has traditionally looked. There would be like a CI server which pulls a CM and like schedules jobs on like one of these carefully tailored machines. So all those machines are pets that demand constant attention and often end up wasting resources. That's a picture of my cat demanding food, by the way. So it not just results in wasted resources. It often ends up frustrating developers. They feel like they're not in control of their destiny. So it's kind of hard to get their buy-in, and they don't feel responsible for the tools. So this is my CI wish list. I want cattle instead of pets. I want all my servers. I don't want to do any kind of manual environment setup, and I would like to use my resources properly. I also want to version control my job configurations. I want to treat them as source code, and I want them to get the same advantages. And I don't want to be in the business of creating jobs manually. And the fifth one is easy parallelization. This ties back to resource utilization. Slow CI is worse than having no CI, so I want my test to be parallelized. So let's talk about solutions to all those problems. Docker provides a nice declarative format to specifying your server configuration. And Kubernetes is one of the cluster managers. I think there are others like Apache Mesos and Docker Swarm, I think. So to make sure that your computer resources are allocated properly. So I'm going to use Kubernetes as an example here. Push button job creation. This is a plugin called .ci, which is a Jenkins plugin that we use. It hooks up with GitHub and sets up, yeah, sets up GitHub. And this is an example of .ciml, the file that devs check in at the root of their repo with all the job configurations. So you get the advantages of version control. So we saw the solutions to all the problems, all the wish list that I listed. And I'm going to talk about how we can put all these together to create an awesome CI that scales and a joy to use. So step one, install Jenkins. Jenkins is like an open-source server. CI server has like 2,000 plugins. That's my pick of CI server. So .ci plugin is a plugin that hooks up with GitHub. GitHub does stuff like setting up commit statuses, hooking up with GitHub. So there's also a Kubernetes plugin. You can point your Kubernetes instance to Jenkins and you can choose the Docker image that you want to use as your Jenkins slave. And you can do stuff like specifying the container instances. So this is an example of .ciml in this example. The build is paralyzed to run tests against five versions of Ruby and it has configurations for notifications. And this is a Docker compose file. The dev can specify the build environment for his build and stuff like Redis and databases. So this is the end result. When the request comes in, Kubernetes spends up like five servers in this case and runs tests against five different versions of Ruby. So it's like a map reduce on the build. So we can do even better. We can move all this stuff up to the cloud. GitHub is cloud hosting for source code. You can host your Jenkins master in AWS or DigitalOcean or any of those. And Google and Amazon have their own container service. And that's it. I know that I fit a lot of stuff into my five minute talk, but you can hit me up on Twitter. And that's the URL for the .ci repo. Thank you.