EngEd Community

Section’s Engineering Education (EngEd) Program fosters a community of university students in Computer Science related fields of study to research and share topics that are relevant to engineers in the modern technology landscape. You can find more information and program guidelines in the GitHub repository. If you're currently enrolled in a Computer Science related field of study and are interested in participating in the program, please complete this form .

An Introduction to CI/CD Tools

May 10, 2021

Continuous Integration and Delivery (CI/CD) are tools that automate the process of software development. In an organization, there is a need for teams to synchronize their work without breaking the code, and we often refer to this as the pipeline of CI/CD.

CI/CD is one of the best practices to integrate workflow between development teams and IT operations. It serves as an agile approach that focuses on meeting business requirements, quality code, and security while the implementation and deployment process is automated.

Prerequisites

The prerequisites for this article includes understanding the following concepts:

  • Implementation of CI/CD tools in software development.
  • Intermediate understanding of CI/CD tools.
  • Prior understanding and usage of any of the CI/CD tools in this article.

Table of contents

CI/CD technique

Continuous Integration (CI) is a programming practice requiring developers to incorporate code changes into a shared repository. Changes committed to the repository are verified by an automated construction, ensuring that bugs are spotted early before deployment.

The CI process runs an automated process that builds the framework, whenever a change is made to the source repository in a version control system. It runs a series of tests to ensure the recent code update integrates with the existing code in the repository. If it doesn’t, then a conflict error occurs.

When a conflict error occurs between the newly integrated code and the existing code, it is usually difficult to track the source of the conflict and fix it. However, with the aid of Continuous Delivery, developers in large organizations can securely and rapidly organize changes of all sorts.

The operations executed by developers with Continuous Delivery can vary. They can be features upgrade, interface changes, bug fixes, and tests in production environments. They can also ensure the deployment of sustainable software to the end-user.

The idea behind the integration of CI/CD in the software development process is that large organization with teams of thousands of developers making changes regularly, they can ensure that the software doesn’t break and changes are being synchronized seamlessly. Also ensuring effective communication between developers and operations.

ci/cd technique

The importance of CI/CD

  • CI reduces the number of repeated processes across all project operations from the development to the deployment stage and receiving feedback on the software.
  • Continuous Integration’s core importance is to ensure that software being developed is deployable to end-users but with better quality and lower risks of failure.
  • CI gives you the ability to spot trends and make informed decisions, as well as the courage to make new changes.
  • Successful implementation of CI practices can boost confidence in software development, such that the team will know that test checks are passed, project code and design follow development standards, and the result is a functioning testable product with each build.

Jenkins as a CI/CD Tool

Jenkins is a server-side continuous integration tool developed with the Java programming language.

This article will provide a structured approach to using Jenkins to automate the entire deployment process and use a docker container to deploy our code to the server. The whole development cycle will be based on the DevOps model with DevOps tools’ help.

Jenkins cycle view

The following steps illustrate the generic approach of implementing Jenkins: This article assumes that you have a prior understanding of implementing CI/CD tools, thereby reinforcing that knowledge to provide a step-by-step approach to using one adequately.

To use Jenkins with your software, you can either build a git repository or use an existing one for your CI/CD. The development team is in charge of committing the code to the Dev-Branch.

When changes are adequately committed to the Dev-Branch, Jenkins can download the source code from Github and map it to a configured job for a particular role. Once a job is configured, you must ensure that continuous integration and continuous development are completed for the job/task.

On successful completion of a job, Jenkins will fetch the code from the Github repository, and then it starts the task’s commit process. Jenkins will proceed to a new phase called the task’s construct phase.

The task construct phase is the phase where Jenkins will compile the code and have it deployed after the DevOps team merges it to the Master branch, then the code is ready for deployment.

The deployment process is activated once Jenkins has deployed the code. It is then deployed to the server using a Docker container.

Docker container

A docker container is essentially a set of virtual environments where we can create a server and deploy the objects to be examined. The use of Docker will enable the developer to run an entire cluster in a matter of seconds.

Docker cycle view

With the Docker container setup, the next phase includes the unit testing on the staging server, then the same code is deployed to the production server once all tests are passed.

CircleCI as a CI/CD Tool

CircleCI is a popular tool in software development that automates the entire pipeline process in continuous integration and delivery (CI/CD).

CircleCI is best implemented to construct builds when new code is committed to a version control system such as GitHub, GitHub Enterprise, or Bitbucket. CircleCI also offers a cloud-managed option for continuous integration or runs on the private infrastructure behind a firewall.

Amongst developers, CircleCI is rapidly growing as the core choice for CI/CD, due to its lightweight continuous integration and delivery framework that supports almost all programming languages. It also has huge compatibility support with top cloud hosting services such as AWS, Azure, Google Cloud, and Heroku.

Key features of CircleCI

  • It is supported by Bitbucket, GitHub, and GitHub Enterprise.
  • Debugging is easy.
  • Fast tests.
  • Notifications via email and instant messaging that are personalized.
  • Exceptionally adaptable.
  • Package uploading with automated merging and custom commands.
  • Setup is easy, and you can create as many times as you want.

Implementing CircleCI

To leverage the features of CircleCI, the version control system being used should either be GitHub or Bitbucket. When you add a new project to CircleCI, you will be required to set some permission parameters to your preference as a developer.

However, when you add a new project, you have to add the following cloud settings:

  • A deploy key is required to test the project from Bitbucket Cloud or GitHub.
  • A service hook is required by GitHub or Bitbucket cloud to alert CircleCI.

By default, CircleCI creates a service hook. As a result, builds are activated for all repository service hook, with PUSH being the most common cause of triggering a build.

Bamboo as a CI/CD tool

Bamboo is a CI/CD tool that automates software deployment to the end-users while ensuring it goes through series of tests processes, version control and software releases management.

Bamboo aids developers in automating test processes in software development while adequately managing builds with different targets and specifications. One of the benefits of Bamboo is the ability to automatically deploy the program into the server for release, saving a lot of time when compared to manual testing.

Why Bamboo

The following are some of the benefits of choosing Bamboo as a tool for continuous integration and deployment.

  • Numerous Bamboo-compatible integrations make it even easier for companies to evaluate and make changes based on analytical test data.
  • Quality assurance, release management, and build status are all visible in one place.
  • Bamboo comprises all the functionalities required. Therefore there is little to no use for plugins.
  • Bamboo’s CI is also deployment-ready thanks to its seamless integration with Jira and Bitbucket.
  • The user interface is simple and intuitive, making it simple to navigate through options and tools for quick and easy functionality.
  • The various staging environments available on Bamboo enable the QA and development teams to deploy environments on-demand without disrupting the production environment.

Implementing Bamboo

Bamboo’s workflow is fairly straightforward in the process of coordinating builds and test suites. There are three building blocks for Bamboo’s workflow.

The Bamboo workflow building blocks are:

  • Plans
  • Jobs
  • Tasks

The plan block

By default, plans only have one stage. It can, however, be used to divide jobs into different stages and then execute them as needed. To ensure efficiency, the plan block utilizes the working repository to run multiple stages sequentially. Plans ensure that you have everything in one place, even though you have separate stages to separate jobs and tasks within them.

The jobs block

Jobs are a collection of tasks that are executed in a specific order on the same agent. They give you control over the order in which the tasks for your build must be completed. Jobs gather task requirements to map out the skills needed in the Bamboo CI Server’s comprehension.

The task block

In Bamboo, the task block consists of a series of discrete unit running in a specific order that carries out a specific system command programmed by the developer. Some of these tasks include executing and running scripts or parsing results on the software tests.

Buddy as a CI/CD tool

Buddy is a CI/CD tool built onto Docker containers used to deploy websites and application from version control systems such as Github and GitLab.

Why Buddy

The following are the reasons why Buddy is a good choice for CI/CD:

  • It is flexible, enables builds, and test environments to be customized and reused.
  • Detects changes, provides caching and parallelism optimizations.
  • It provides attachable services to other applications, such as Firefox, PostgreSQL and others.
  • Coupled with real-time progress and logs, as well as an unrestricted history, you can keep track of everything.
  • Management of workflows with templates for cloning, exporting and importing pipelines.
  • Support and integrations for Git that are second to none.

Buddy provides a unique feature of zero-downtime deployment solution which is configured with its Graphical User Interface. This solution requires the server and git repository for the codebase. There is also an option of adding an SSH solution to run builds operations effectively. Buddy creates the necessary folders on the server and deploys the application using the code from the git repository.

Conclusion

This list has provided you with the necessary information to help you choose the CI/CD tools that best meet your needs. This article covered some of the most advanced CI/CD tools with all the necessary features for your projects.

Your requirements, existing infrastructure, and potential for future growth and improvement will influence your final decision.

On a final note, the technology space is rapidly evolving and trends in CI/CD will continue to change. When there are significant changes in the CI/CD and DevOps trend, this list will be updated to ensure that the information provided to you is accurate.

Happy learning!

Further Reading and References

  1. Buddy Guides The DevOps Automation Platform
  2. CircleCI Integration
  3. Pipelines with Jenkins

Peer Review Contributions by: Willies Ogola