When talking about software production, the term CI/CD comes up often as a standard practice in software development. But what does this entail?
What is CI/CD?
CI/CD is part of the agile methodology in software development. The premise is collaboration, in terms of self-organization and team functionality among developers. Developers using agile practices utilize a variety of software development frameworks – not limited to Scrum or Kanban, which we also use at PANTHEON.tech, as part of our CI/CD effort.
Scrum is an agile framework (often used as a methodology) for developing complex and innovative software solutions. It is a simple process of listing and then developing software solutions, according to the customer’s wishes.
We recommend reading the “Manifesto for Agile Software Development”, which significantly boosted the popularity of the term agile.
In general, Continous Integration describes how developers merge their functional copies to a shared space, multiple times per day. Contributors to various GitHub branches practice this regularly when updating their branches and testing them. At PANTHEON.tech, we utilize Gerrit for peer reviews of changes to code.
If a developer decides to change/update/improve part of functioning code, the tested result will be shared with other developers working on the project, in the same shared repository. That way, developers overcome the issue of too many conflicting branches. This is the first part of CI/CD.
Continuous Delivery / Deployment
The second part of CI/CD varies in its definition. It can either mean delivery or deployment, while both terms can be used as equivalents towards the same goal.
Continuous Delivery is a situation, where after the developer’s changes to the code are automatically tested for bugs (PANTHEON.tech utilizes Travis CI), the code is uploaded to a repository/directory.
Continuous Deployment symbolizes the automatic deployment of changes directly to the production environment for customers to use. In certain situations, deployment is handled by a separate team, which can become overwhelmed by requests for deployment. Continuous Deployment reliefs them of this task by automating it.
Recommendations for CI/CD
We utilize Gerrit as a tool for supporting team cooperation in software development. It is great for peer reviews of individual changes in the source code, as well as for examining the code as a whole.
Jenkins is a tool designed to automate version infrastructure. It follows changes in repositories, such as SVN and Git, finds what changes were made, tests and if successful, incorporates them into the newest version.
For organizing, storing and distributing software components, we use the Nexus repository. Thanks to high automation, we make sure that delivery and deployment are possible at any time.
An application we use for project management. Jira has broad functionality in task, incident and defect management overview. It is used on both sides of the software barricade – development & service. In order to best serve the client’s needs, we always choose the project management methodology, which best suits the project.
Scrum is an agile framework (often used as a methodology) for developing complex and innovative software solutions. It is a simple process of listing and then developing software solutions, according to the customer’s wishes. All at a fast pace, within a short period of time (sprint).
Scrum supports complex development and testing methods, target management and evaluation, with ever-present project oversight. The customer gets a better insight into the project, as he is fully integrated into its processes. He can thus see the first tangible results, as soon as two weeks after launching the project.
A test automation framework, designed for acceptance testing & test-driven development (ATDD). It utilizes a user-friendly environment, which can easily be extended by implementing new libraries through Python or Java. Robot Framework operates on simple keywords and phrases.