This post was originally published on Hackmamba
Continuous integration and Continuous Delivery (CI/CD) is a process that allows for software storing, tracking, building, testing, and deploying. The process that tracks software changes made by multiple users, while testing and deploying the software is a huge milestone in modern software development practice.
This article will break down the process of CI/CD and the common tools to implement it.
Continuous Integration and Continuous Delivery (CI/CD) is defined by Red Hat as a method to frequently deliver apps to customers by introducing automation into the stages of app development. While continuous integration ensures that stable software is built collaboratively, continuous delivery manages the consistent deployment of built software.
Imagine multiple engineers building an application, each working on a different part of the application but able to see changes made to it, who made them, and, when done, deploy their software.
In the past, with a waterfall model, developers would build their part of the application and merge when done. It was hard work, as what might work on John's system might crash in Jerry's, making developing a large-scale project cumbersome.
Code error tracking was problematic as each developer might use a different stack, and dependencies or lines deleted by one of the developers might not be updated. Events like this push back the project timeline and cost organizations money and time.
Fixing bugs and ensuring the different parts fit became part of large-scale project production.
All these created the need to develop a better process of integrating software. With an efficient CI/CD pipeline, project changes will be tracked, tested, and, if passed, guaranteed to work anywhere.
Here's an example.
James and Fatima are building an application. James does not need to wait for Fatima to finish writing her software before he begins. He can create a branch and work on his build. They can share a bucket (repository) and then merge their software. Any change Fatima makes, James sees it. If anything breaks, they can return to a point when it was working.
The repository can store, merge, and build a testable model using the correct virtual dependencies.
The CI/CD pipeline automates integrating, running tests, delivering releases, and deploying changes to the software collaboratively and in real-time.
The integration and delivery process typically follows a series of steps with predefined actions for each step. The steps are usually specific per project and remain the same across all users. This ensures consistency. Various tools provide methods to create and configure these steps. Common steps are linting, testing, building, deployment, and notification.
The software continuously flows through this pipeline all the way from a push to a repository, to public deployment on a server.
CI/CD pipeline allows for easy testing of new commits and ensures the software is reliable and does not break, and if they do, the CI/CD pipeline can send an alert to the software's author.
Common tools used for continuous integration and continuous deployment
Jenkins is one of the most popular CI/CD tools. It is open-source, making it more popular with over a thousand plug-ins. It supports Windows, macOS, and Linux.
- Jenkins is open source with a large community.
- It is user-friendly and straightforward to navigate.
- Master-slave architecture: The master distributes to the slave how and what to build. The slaves can test different builds in different environments or OS.
To understand GitLab CI/CD, we must first understand Git. Git is a version control system that tracks changes in a project or multiple projects. It tracks changes over time and can commit new and updated changes to repositories locally or remotely.
- Unlimited number of repositories
- User-friendly and easy-to-use tools.
- Easy to set up.
GitHub actions take it one step further by running the software on cloud infrastructure while giving the developer updates on errors and how to fix them.
- Live logs
- Supports all languages
- Track and test in real-time
TeamCity is a general-purpose CI infrastructure that allows flexibility for all workflows. Its cloud service is suitable for novice, professional, and enterprise businesses that want to scale.
- Easy to customize.
- Servers are functional and highly stable.
- Child projects can reuse settings and configurations.
Bamboo is a reliable CI that can quickly scale within seconds. Its workflow automates and unleashes the AGILE model, which powers and automates the workflow.
- Creates images and automates the file transfer into the registry
- Supports build agents
- Triggers and pushes notifications based on changes detected.
We learned why software projects use CI/CD, how they work, and common tools used in creating a CI/CD pipeline.