image
Book 6 - Continuous Integration
Start course
Difficulty
Intermediate
Duration
1h 13m
Students
5014
Ratings
4.5/5
Description

In this course, we introduce you to the DevOps Playbook Part 1.

The DevOps Playbook Part 1 course begins with Book 1, a brief introduction to DevOps and how in recent times it has become the defacto approach to developing and operating applications. We then introduce you to Books 2 through to 7, covering the topics, CALMS, Collaboration, Automation, Version Control, Continuous Integration, and Continuous Testing, where each book documents a required DevOps competency, one in which you’ll need to adopt and establish skills in to be effective in DevOps.

  • Book 1 - DevOps
  • Book 2 - CALMS
  • Book 3 - Collaboration
  • Book 4 - Automation
  • Book 5 - Version Control
  • Book 6 - Continuous Integration
  • Book 7 - Continuous Testing

The DevOps Playbook Part 1 course includes 2 demonstrations where we put into practice some of the DevOps theory presented.

  • Atlassian BitBucket and Slack Integration
  • Atlassian BitBucket Pipelines and Docker

Note: the source code as used within these demonstrations is available at: https://github.com/cloudacademy/devops/tree/master/DevOps-Adoption-Playbook 

Transcript

- [Instructor] Welcome back. In this lecture, we'll review continuous integration and why it is an important service used within DevOps. 

Continuous integration, or CI, is a development practice in which developers often commit and merge their code back into a central version control system, from which then an automated build is triggered. The automated build can perform tasks such as compilation, and run test suites to detect and report problems early. Continuous integration is important as it allows the team to detect integration problems early on, when they are easier to correct. The alternative, which is to commit infrequently, becomes expensive to fix as the amount of change within the code base to be examined becomes more significant and excessive, resulting in delayed delivery or even complete project failure. 

Adopting continuous integration is not as difficult as it may sound. As you will see later, there are plenty of continuous integration tools to pick from. The key is to start small, write simple tests for critical parts of your code base. Configure your continuous integration system to automatically execute your tests on every commit or push to the main repository, and then educate your developers to integrate new changes frequently - at least daily. Have the continuous integration systems send feedback regarding the outcome of builds to the developers to ensure any broken builds are fixed immediately. A good pattern is to send this feedback via a team collaboration channel, such as Slack. 

The benefits of using a continuous integration tool are numerous. Let's cover off a few of them. Increased confidence: You can be assured that your code works if it passed all the assigned automated test suites. Integration problems are detected earlier and, as mentioned, are easier to fix. Long and problematic integrations are no more. You spend less time debugging and more time building new features. Team communication: Build and test results can be sent via team channels. And build consistency: You don't have to worry about build dependencies being different. 

Some challenges associated with continuous integration to automate and build and execute tests are: Upfront effort: It takes time to install and set up a continuous integration environment. Creating unit tests and ensuring maximum code coverage involves significant effort. Long term maintenance: Managing and maintaining continuous integration environments involve things like maintaining the test suites, build scripts, and even capacity planning, ensuring that there's enough disc space for every and each build that takes place. Error message overload: Continuous integration builds often emit numerous build errors. Culture change: It may be difficult to pitch the idea of a continuous integration system to a business manager unfamiliar with what benefits it actually provides. Having to justify the upfront cost of seeding up. 

Some example continuous integration tools to consider are: Jenkins. An open source automation server written in Java. TeamCity: A Java based build management and continuous integration server from JetBrains. Bamboo: A continuous integration and continuous deployment server developed by the team from Atlassian. CircleCI is a software as a service or cloud based offering for continuous integration, allowing teams to rapidly build quality projects at Scout. 

In the following example, CircleCI is used to perform a build of a docker container. The docker file, which documents the build snips of the container, is stored in a GitHub public repository. Any updates to the docker file that are pushed into the repository triggers CircleCI to perform a docker image rebuild. If the build completes, CircleCI pushes the updated image into Docker Hub. CircleCI then requests Docker Cloud to launch a docker container on AWS infrastructure, referencing the newly registered docker image. Updates throughout the CI-CD process are published to a Slack team channel for communication and collaboration purposes. 

A continuous integration tool is a must have. Pick the right tool that complements existing skill sets, as well as the technology stack you're building in. Educate your developers to integrate early and often, and to take ownership for code quality checked into the central repository. Ensure that build reports are distilled amongst team members to enable them to address build and integration problems as and when they happen. 

Okay, that completes this lecture on continuous integration. Go ahead and close this lecture and we'll see you shortly in the next one.

About the Author
Students
143423
Labs
69
Courses
109
Learning Paths
209

Jeremy is a Content Lead Architect and DevOps SME here at Cloud Academy where he specializes in developing DevOps technical training documentation.

He has a strong background in software engineering, and has been coding with various languages, frameworks, and systems for the past 25+ years. In recent times, Jeremy has been focused on DevOps, Cloud (AWS, Azure, GCP), Security, Kubernetes, and Machine Learning.

Jeremy holds professional certifications for AWS, Azure, GCP, Terraform, Kubernetes (CKA, CKAD, CKS).