Continuous Integration (CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.
Business Benefits of CI
CI Reducing Risk
When you integrate code frequently, you reduce the risk level of any project, though it is essential to have metrics in place to measure the health of the application so that defects in code can be detected sooner and fixed quicker. Frequent integration also means that the gap between the application’s current state and the state of the application in development is smaller.
CI Reducing Overheads
The costs associated with setting up and managing a CI system will be far outweighed by the labour costs saved, especially if the system is running on a public cloud leveraging a utility billing model like Cloud-A. Finding bugs in the development level is the cheapest way to find them, rather than finding them in production. Another important thing to note is that a robust CI system may replace a portion of your internal quality assurance process.
Repetitive manual processes are slow and prone to human error. Deployment tasks should be bundled up and automated to make the process more efficient. Reducing repetitive manual can assure you that:
- an ordered process is followed
- the process runs the same way every time
- the process will run every time code is committed to version control
These assurances serve to facilitate the reduction of labour on repetitive processes, freeing people to do work of higher-value.
CI for Quality Assurance
Continuous Integration can enable faster time to market for your software products, by enabling organization to release deployable software at any point in time. This can be extremely attractive from a stakeholder and/or client prospective. Without CI, projects are prone to delayed releases or even termination.
CI enables better project visibility
With the proper CI setup and predetermined metrics, Continuous Integration can allow project teams to take note of trends and make better informed decisions earlier on in the development process.
Continuous Integration can facilitate:
- Effective Decision making
- Trend identification
CI with Cloud-A
Cloud-A enables development teams to inexpensively implement an effective CI system by providing on-demand infrastructure with elastic capacity and a utility billing model, allowing teams to spin up an environment for a couple of hours, and spin it back down when it is no longer needed. Since Cloud-A provides APIs for every service and CLI toolsets, the environments are programmable and therefore automatable. Project teams can use configuration management tools (DevOps Tools for the Canadian Cloud) like Puppet and Chef to automate and manage the code, the application and configuration once your instances are created.
Check out this business case on how Cloud-A can provide over 80% cost savings for your Testing, Development and Quality Assurance environments here.
A favourite of the Cloud-A DevOps team, Jenkins is an open-source continuous integration server, which accelerates the software development process through automation. It manages and controls development lifecycle processes of all kinds, including build, document, test, package, stage, deployment, static analysis and many more.
GitLab CI is an open-source continuous integration server closely integrated with Git and GitLab. GitLab CI requires GitLab to be present.
Bamboo is a CI server from Atlassian. Bamboo supports builds in any programming language using any build tool.
CPU and Ram
the minimum CPU and memory requirements for many CI servers will depend on the size and complexity of your plans. You need to consider:
- Will your builds have functional tests as part of the plans?
- Are your plans executed simultaneously? If so, how many plans will be running at any given time?
- What are the requirements for your running builds, for example do they need large amounts of memory/disk/swap space?
- How many users will be using the server at any given time? Like any web application, the system resource needed is proportional to the load experienced by the server.
CI Server storage requirements depend upon the usage pattern during use. The usage pattern depends on factors such as:
- How many plans you will run
- How many tests each plan will execute
- How many artifacts you are going to have and their size
Cloud-A recommends starting with the root disk included on your instance and evaluating your usage patterns early on. Where usage is likely to grow, consider adding additional storage by adding addition volume storage to your instance.
Take a look at Cloud-A’s pricing page to help you make your decisions.
Dynamically Scale your CI Environment
One of the problems managing a CI deployment is that many developers and many changes to code can create a resource bottleneck. Using Jenkins CI as an example, which uses a master/slave architecture, to process more Jenkins jobs, you would require more slaves. In a static infrastructure scenario with either on-premise hardware or non-elastic VMs from a hosting provider, you would want to avoid spinning up several slaves as they would sit idle when the demand for CI was low. Using Cloud-A’s elastic, pay as you go infrastructure, project teams can dynamically scale by spinning up as many slaves as required to speed up development and spin them down when it is no longer required to reduce costs.Spec’ing your first CI server with Cloud-A