Version Control System support
The core pillar of a CI / CD system is the support and integration of the underlying Version Control System (VCS). The most popular VCS’s are Git, Subversion, Mercurial and Perforce. cloud CI tools may offer support for some or all of these VCS’s. It is critical to choose a CI tool that offers support for your projects VCS.
On-premises vs Cloud
Some of the aforementioned CI Tools like Jenkins can be installed on-premises. This means your team is responsible for configuring and managing the CI system on your own infrastructure. This can be beneficial for privacy and security reasons. For example, if you have customer data privacy concerns to meet compliance standards, on-premises may be a requirement. Additionally, on-premises instances may offer deeper customization and configuration options.
On-premises can be extra work that is not in line with your core business needs. Cloud options outsource the management of the CI Tool to a 3rd party vendor. The cloud hosting company then handles uptime, support, and scaling of the CI Tool allowing your team to focus on core business needs. This can be a huge benefit for tight budget teams or smaller companies that need aggressive focus on product market fit goals.
Containerization is a modern software development trend. Containerization enables the distribution of an immutable, repeatable, isolated copy of an application. Containerization is enabled by tools like Docker, and Kubernetes. Modern CI Tools will offer support for integrating containers into the CI/CD process. Containers solve the “works on my machine” problem. Ensuring that application code is packaged in a frozen snapshot of system level dependencies. This provides guarantees that when your team's code is executed on the CI Tool it is a replicate of the local environment. This eliminates a whole class of environment parity troubleshooting issues that arise without containers.
Plugins and 3rd party integrations
CI Tools become even more useful when integrated with the rest of your tech stack. Analytics about engineering team efficiency and performance can be collected from CI tools. Sprint planning applications can be tied to CI tools to automatically update sprint status when the code has been delivered. These integrations can be used to guide engineering team KPI’s and roadmaps.