Creating a CI/CD pipeline is one of main DevOps' responsibilities to improve the software development process, make it more automated and faster. For this work a DevOps can use various tools. In this article we will present you the best CI/CD tools, describing their main features, advantages and disadvantages.
What is CI/CD?
CI stands for continuous integration and CD for continuous deployment and delivery. It’s a way of introducing automation into stages of app development. Continuous integration helps developers merge their code changes back to a shared branch, or “trunk,” more frequently—sometimes even daily. Once a developer’s changes to an application are merged, those changes are validated by automatically building the application and running different levels of automated testing, typically unit and integration tests, to ensure the changes haven’t broken the app. This means testing everything from classes and functions to the different modules that comprise the entire app. If automated testing discovers a conflict between new and existing code, CI makes it easier to fix those bugs quickly and often.\ Continuous delivery usually means an application’s code pieces (or code changes) are automatically bug tested and uploaded to a repository in an automated way, which can be done with tools mentioned in this article. Continuous deployment is another process, in which the program is delivered (also in an automated way) to production and testing environments. This whole testing and deployment process is designed and controlled by a DevOps engineer who creates so-called CI/CD pipelines, which we mentioned in this article. Thanks to them the efficiency of software and cooperation between development and operations is much higher. Also the time needed for software development is reduced.
Firstly called Hudson, changed its name in 2011 to Jenkins, becoming one of the most popular tools for DevOps. Jenkins is an open source software for creating automation to build, test and deploy software. It works on Java servers, but allows the creation of apps in other programming languages. Jenkins’ main advantages are the Thriving Plugin Ecosystem, big worldwide community, easy installation, configuration and distribution. How exactly does it work?
When a developer adds modifications to the repository, Jenkins transports them to the server and performs a build. In case of failure the developer receives an automated email about this fact. In case of success, the build is moved to deployment.
To main disadvantages of Jenkins we can count it’s plugins - the tool require dozen of plugins and the more of them, the bigger chance for errors during upgrades. What’s more, not all plugins are compatible with Declarative Pipelines.
Designed by Atlassian, Bitbucket is a native Git CI/CD tool that cooperates with Jira and Trello. Thanks to this a team of developers may create one space, in which they can work on the code, test and deploy it. You can use three versions of the tool. Bitbucket Cloud uses the cloud solution to improve cybersecurity, prevent errors and of course create pipelines. Bitbucket Server is hosted locally and cooperates with Bamboo dedicated for CI/CD. Bitbucket Data Center is an extension of Server, which means hosting on many servers.
The most commonly reported disadvantage of Bitbucket is no possibility to integrate with other products other than Atlassian and no support of more advanced GIT features.
GitHub is a free hosting platform established in 2008. It can work as a remote repository and local repository, which means that during work the developer doesn’t need access to the Web, because all changes are saved on disk. In 2018 GitHub introduced an API dedicated to CI/CD called GitHub Actions. It works both on containers and virtual machines with macOS, Windows and Linux. It also supports many programming languages, like Java, Python, PHP, .NET or C++. Actions consist of code, so developers can use it as a regular code - editing, reusing, sharing or forking. It’s a great solution not only for automation, but also for workflow orchestration.
GitLab is another free open-source server with a part dedicated to be CI/CD tool. GitLab CI is responsible for build and test software when a developer adds a new code (continuous integration) and then GitLab CD puts the code changes on the production environment (continuous delivery). What’s more, GitLab uses Auto DevOps - a set of features and integrations for software delivery and software development. It detects code language and uses templates for creating CI/CD pipelines.
GitLab CI/CD is easy to learn, flexible and highly scalable. You can execute the jobs faster by setting up your own runner, and the project team members can integrate their work daily, which leads to less errors.
GoCD works similarly to Jenkins and is often chosen as a good alternative. It automates the whole process of build and test, from checking the code to deployment. But unlike Jenkins, GoCD doesn’t build a separate server on the environment, but can cooperate with Kubernetes and Docker, also on cloud native deployments. It also provides auditing. GoCD is recommended for smaller projects, as it’s a single-purpose CI/CD tool.
A weak part of GoCD is the documentation, about which users say it “should be improved by including real examples and more setup cases”.
Flux belongs to the GitOps family of projects and is a set of solutions designed especially for Kubernetes, it was also open-sourced to the Cloud Native Computing Foundation. Flux works in a slightly different way than the rest of CI/CD tools mentioned here. When developers write Kubernetes manifests and push them to a repository, the pod keeps current configuration and Flux checks it every 5 minutes, looking for changes. If it finds anything, it synchronizes the configuration with the cluster.