November 17, 2022

Why It’s Time to Migrate from Jenkins to Drone CI

Table of Contents

Migrating from Jenkins to Drone CI offers a modern, container-based CI/CD solution that is simpler, faster, and more efficient. Drone CI's use of Docker containers and declarative YAML configurations streamline setup and maintenance, making it an ideal choice for organizations embracing cloud-native technologies and GitOps methodologies.

Whether you are a developer or an operations engineer, there is no room for using mediocre tools in this cloud-native world. Every day there are innovations and more accessible services that make our lives as coders and ops pros easier. Today, DevOps is the focal point for all technology companies. Continuous integration (CI) is the first step towards embracing DevOps as a methodology. 

However, with so many CI tools on the market, knowing which one is best for your organization can be tricky. There are also many options with different features, pricing models, and support plans. This article will help you understand why Jenkins is not a suitable CI tool for modern enterprises and how you can migrate to Drone CI. 

The Need for a True CI Tool

We all know that cloud tools are evolving each day. For CI, there are many tools in the market, but the one that is truly right for  developers is hard to find. While Jenkins can be a good starting point for beginners and small organizations, it gets difficult once the deployments increase. While speed can be another factor to judge a CI tool, it should also be easy to set up on your computer with minimal commands. 

Drone CI has all it takes to be the one-of-a-kind CI tool helping developers build and test their applications through continuous integration. You can set it up on your local machine in minutes and start doing continuous integration. Drone CI is built on Docker and  uses the power of containers at each stage. 

Jenkins vs. Drone CI

Jenkins

Jenkins is an open-source CI tool. It is used to build and test software, either on a developer's local machine or in a CI environment like any public cloud. With Jenkins, you can automate your software delivery pipeline from code commit to production. Jenkins is primarily used for build and deployment automation. It is commonly combined with other tools in the DevOps toolchain, like source code management, issue tracking, and project management. 

In addition to these tools, Jenkins is used for automated testing and deploying applications. Jenkins' features include managing different jobs, viewing summary graphs, and receiving email notifications.

Drone CI

Drone CI is an open-source CI server acquired by Harness. It is used to build and test software, either on a developer's local machine or in a continuous integration environment like any public cloud. With Drone, you can automate your software delivery pipeline from code commit to production. In addition to building software, Drone allows you to build, test, and deploy your applications. Drone CI is considered a modern CI tool as it uses the declarative approach in the form of YAML files to automate tests and extensively employs Docker containers at every step. The build pipelines take less time, and it is easy to set up and run. 

Drone CI is a container-based declarative continuous integration tool that extensively employs Docker containers at every step and can easily run on your laptops, private data centre or on a public cloud. This declarative nature of CI helps organizations to adopt GitOps. 

Here is a simple configuration yaml file:

kind: pipeline
type: kubernetes
name: default
 
steps:
- name: test
  image: node
  commands:
  - npm install
  - npm test

Just extending the YAML configuration with another scenario where you would like to merge the changes to the master branch. In this case, the stages are:

  • Build
  • Unit test
  • Deploy to dev
  • Integration test

The YAML configuration can be easily specified as below:

kind: pipeline
name: default
 
steps:
- name: build
 image: node:8.6.0
 commands:
   - npm install
   - npm run build
 when:
   event:
     - push
 
- name: unit_test
 image: node:8.6.0
 commands:
   - npm run unit_test
 when:
   event:
     - push
 
- name: intergration_test
 image: node:8.6.0
 commands:
   - npm run integration_test
 
- name: deploy_dev
 image: node:8.6.0
 commands:
   - npm run deploy -- --env=dev
 when:
   event:
     - push
   branch:
     - master

Why Jenkins is Not Suitable for Today's Cloud-Native World

No doubt, Jenkins has a first-mover advantage in the CIcontinuous integration field, and it became popular because of its vast spread of plugins. For a small team with basic usage, Jenkins is fineOK, but it becomes challenging as your team grows. It lacks modern cloud- native capabilities. Plugin configuration seems to be a nightmare, and at some point, it becomes hard to maintain and scale and can be difficult to maintain uptime. Also, Jenkins is popularly known for its high maintenance. Visibility on the pipelines is very poor using Jenkins and it makes debugging a real pain. Initially, when you set it up, it works like a charm, you change a simple thing, it starts breaking. 

Lack of innovation and old methodologies make enterprises move away from Jenkins to much more sophisticated platforms. Managing Jenkins can be a full-time role, it squeezes out your developers' energy and time. Some of the biggest reasons why Jenkins is not suitable for your cloud-native development include:

  1. Jenkins is used for more than justCI, and that's where the problem starts. As the Jenkins instances become more complex, they will create bottlenecks. 
  2. \CI and continuous deployment (CD) are often done separately.  Users must implement CD with custom scripts – which isn't the right way to do DevOps.
  1. You need a Jenkins expert to maintain and debug it when something goes wrong. Drone administrators report spending far less time maintaining their Drone instances than Jenkins administrators. Drone can easily scale to handle thousands of pipeline executions per day, and only requires a few hours of maintenance per month.
  1. With so many plugins, the vulnerabilities are easily introduced and chaotic. Plugins have complex interdependencies, so updating one plugin could potentially break another.
  1. Jenkins can be tough to scale efficiently because you can have only one controller that can't be run in a highly available mode. 
  2. Multiple Jenkins instances can't work together in a high-availability configuration, only one Jenkins instance can be writing to the database at a time.
  1. Jenkins was not designed keeping future innovations in mind. Jenkins was started years before Docker was created, so Jenkins has never been a container-native CI tool.

Jenkins is heavy on compute resources, it consumes a lot of resources and it still lags when your download some basic plugins. For example, this Jenkins docker image is ~270MB, whereas the Drone docker image is ~22MB.

Jenkins docker images are significantly bigger
Drone docker images are much smaller

Also, check out this example from Twitter user Jim Sheldon sharing the differences between image sizes.

  1. Jenkins requires a steep learning curve, and users will need to learn multiple languages for complex CI/CD setup. Groovy is just one,  Jenkins DSL is another, and soon itbecomes chaotic for someone who is trying to set it up for the first time. 
  1. Some users reported that running builds using Jenkins CLI creates delays, which is not a good sign for a DevOps tool. Drone CLI is fast and you can run builds locally with a simple drone exec command. Drone also has a "debug mode" that can be enabled, allowing users to interactively debug failed pipelines.

What are the Benefits of Migrating from Jenkins to Drone?

The simple process of Drone deployments

There are many benefits in migrating from Jenkins to Drone. These are the top ones we consider: 

  • Simplicity – Drone is much simpler than Jenkins. If you need something more advanced, then Jenkins has more features. However, if you just want to get up and running quickly without having to configure anything, then Drone is a much better choice.
  • Speed – Jenkins uses a polling mechanism by default to look for changes to your code. This is something that Drone avoids as it uses webhooks. This means that Drone is much faster at detecting changes to your code. Jenkins can work with webhooks, but it is not the default behavior and is not as easy as Drone. 
  • Ease of use – There are two ways that Drone is simpler than Jenkins. First, the user interface is much simpler. Second, the installation process is much simpler.
  • Modern approach – Jenkins still uses old methodologies and executes commands directly when running jobs rather than using modern approaches such as containers.
  • Written in go –Go is becoming a suitable language because of its capabilities to fit the cloud-native space, and Drone is written in Go, whereas Jenkins is written in Java. 
  • Simple tests – You no longer have to use Groovy to build your tests like in Jenkins. Everything is in a declarative fashion, and the tests are specified with the .drone.yaml file. 
  • Simply declarative – In Drone, everything is configured through simple YAML files and it is very easy to configure and even the newest user can understand and set it up. As we discussed before, the declarative nature of Drone helps organizations adopt Gitops easily.
  • Container-based and cloud native – Every step is a fully isolated Docker container so that developers can quickly know which image has been used at every stage. The container helps debug if something goes wrong at any stage of the pipeline and it’s easy to reproduce each step on your local machine. 

Also, since GitOps is a more modern approach to deploying Kubernetes-related deployments, the combination of Drone and Argo CD goes amazingly well. For example, you can use Drone to build your images and then commit a change to your application configuration in git, which Argo recognizes and deploys the change. If you like a more customized approach, you can use Harness GitOps, which is well integrated with Drone. 

Get Started on Drone CI and Harness

There is no one-size-fits-all solution when it comes to CI/CD tools. Different organizations will have different needs. Similarly, different organizations will prioritize different features. Therefore, when selecting the right CI/CD tool for your organization, it is critical to evaluate your needs and find the product that best meets them. Also, it is important to consider what functions are necessary for your organization and which ones are nice to have. Today, every organization desires to embrace DevOps and use modern cloud-native technologies to deploy software quickly. It has now become vital to select a platform and tool that are cloud-native withmodern capabilities. With that in mind, if you are currently using Jenkins and are looking for an alternative, consider migrating to Drone. Harness is here to help and support you with any questions. 

Get started with Drone CI for FREE!

Get started with Harness CI for FREE!

Further Reading and Case Studies on CI

Continuous Integration