From GitHub to Jenkins, your code pipeline consists of many different parts with specific functions.
- Welcome back, in this movie we're going to talk tools. The continuous delivery pipeline for each organization and team is different. The idea of a pipeline is a series of phases each backed by a specific tool. - Let's look at the six key phases for continuous delivery and the tooling that's associated with it. The key areas are: Version control, CI system, build, test, you'll need an artifact repository, and deployment. - [Earnest] Version control is where we commit code changes and can view the entire history of all changes ever made. It allows the developers to stay in sync with each other by treating each change as an independent layer in the code. - Most organizations today opt to use Git in the form of GitHub or Bitbucket either as a SAS or sometimes as an on-prem enterprise version. These add additional collaborations and sharing benefits often found in social media. You can kind of think of it as Facebook meets Version control. All right, next up is continuous integration. - Jenkins being open source is popular in many organizations. It's UI is a little bit difficult to navigate at times, but it has tons of community support and almost every provider integrates with it. There's also a commercial offering of it from CloudBees. Other options include GoCD, Bamboo, and TeamCity. - There's also been a good amount of adoption of continuous integration as a service from companies like Travis CI or CircleCI. All right, now let's talk about build tools. Build tools are very language dependent. You might be going simply with Make or Rake if you're using Ruby. But these just execute a consistent set of steps every time. - Or you can take a workflow approach with Maven that can allow you to run reproducible builds and tests from your developer desktop all the way to your CI system. - If you're doing testing on the front end code, it's really popular to use Gulp. And if you're building out an infrastructure or something like Packer from HashiCorp. - Most development languages have unit testing built-in, or there's a strong recommendation by the community for what to use like JUnit for Java. - The same goes for code hygiene with linters and formatters. Kind of like in Golang, there's Golint or Gofmt or maybe for using Ruby, there's a version called RuboCop. - Integration testing is usually performed with test driven frameworks or by using in-house scripts. - Testing frameworks and tools in this area include: Robot, Protractor, and Cucumber. The cool thing about these is they let you express an outside in approach to the code. - They can hook into Selenium for UI testing, or you can use Selenium on its own. If you end up doing a lot of acceptance testing for the front end, there's a great SAS offering called Sauce Labs you can use. - [Narrator] Let's say you're doing infrastructure testing. You'll probably be using tools like KitchenCI for chef that actually creates new instances and runs a full convergence of the code to test. - [Earnest] Tools like ApacheBench or JMeter can help you do performance testing. - And you got to add some security testing in there as well. Gauntlet and Mitten are two open source outside and testing tools. There's also tools that do code inspection like the open-source tool Brakeman or there's also paid offerings from companies like Vericode. - One of the most important attributes of these tests is your ability to run them on the Dev Desktop prior to check-in and not just rely on your CI pipeline. Tools like Vagrant, Otto and Docker Compose lets you deploy and run your whole app locally so that you can run not just your unit tests, but also integration and acceptance tests at any time. - Once your code has been built and tested, the artifacts have to go somewhere. - Popular solutions like Artifactory or its open source equivalent Nexus manage lots of different artifact formats or a specific output like a Docker image can be sent to Docker Hub or your internal Docker registry - Earnest, one option I've used before is just to have your build system tag the artifact and upload it to Amazon S3. This in turn kind of creates a minimum viable artifact repository, but it definitely works. - [Earnest] That will work. So finally we get to deployment. Rundeck is a nice workflow driven deployment option. It lets you define a job, put off and permissions around it, and then automate a workflow across your systems. And deployment is a popular workflow that people use it to automate. - [Narrator] Some people use a configuration management tooling for doing application deployment or other people just write their own custom tooling. Some use commercial tools from folks like UrbanCode and ThoughtWorks. There's an open source offering from Etsy, it's called Deployinator. It provides a dashboard that lets you run your own deployment workflows - Tools in this space change a lot. And like we said earlier, nobody has the exact same continuous delivery pipeline and that's okay. - When building out pipelines for different places I've been at, I try to think about what's the easiest thing I could build here. I try to really focus on the question of, what's a minimum viable product for this portion of the pipeline? - That's right, remember that anything that doesn't directly add value to the product you're working on is waste. And over-investing in your CI pipeline beyond what your product needs, qualifies.
In this course, well-known DevOps practitioners Ernest Mueller and James Wickett provide an overview of the DevOps movement, focusing on the core value of CAMS (culture, automation, measurement, and sharing). They cover the various methodologies and tools an organization can adopt to transition into DevOps, looking at both agile and lean project management principles and how old-school principles like ITIL, ITSM, and SDLC fit within DevOps.
The course concludes with a discussion of the three main tenants of DevOps—infrastructure automation, continuous delivery, and reliability engineering—as well as some additional resources and a brief look into what the future holds as organizations transition from the cloud to serverless architectures.
- What is DevOps?
- Understanding DevOps core values and principles
- Choosing DevOps tools
- Creating a positive DevOps culture
- Understanding agile and lean
- Building a continuous delivery pipeline
- Building reliable systems
- Looking into the future of DevOps