Well, here's the fact; i was looking for the best CI/CD tool for my little cloud cluster which is hosted in digital ocean. And let me say this; I tried every tool from Java based tools i.e. Jenkins, GoCd and cloud hosted tools CircleCI and Travis. All of them does the job done after all; well some have drawbacks but majority speaking they're all good but my preference goes to Mr. Drone after all. I'll try to explain why I've preferred drone-ci to those other CI/CD tools.
Why Drone CI
My CI/CD journey began with Jenkins. Jenkins is an open source ci/cd or automation tool which is wildly used out there. But that comes with a price if you really need speed on your automation process. Here's what i found out when working with Jenkins and GoCD tools; First one is, they're both Java based tools; which makes them a bit slow when doing their job. Also, when we say Java based tools, it runs on top of a Java Virtual Machine (JVM), thus it hits up CPU and RAM pretty good when running. When i say it hits up CPU and RAM; it actually generate a high bill depending on which cloud platform you're using. I've carefully analyzed when using those two tools in my small cluster found in digital ocean and it really has a difference when migrated from java based CI/CD tools to others (will shortly talk about this). Second one is their sizes of docker image files. well, it might not be a key factor to you; but for me, the less the size of the docker image, the more i fell in love with the service as it'll be super easy for the orchestrator tool to manage the service smoothly. Their size is 333.88MB (jenkins/jenkins:lts) and 295.46MB (gocd:v20.8.0) respectively. Now; Let us come to Mr. Drone, it's docker image size is almost 27MB (as of writing). Small and beautiful; right! Second one is; it's based on GoLang programming language, super fast and much more preferable and suitable for cloud infrastructure environments. Also in advance, it has simple and easy to use UI where anyone can understand what's going on in real time of automation. Documentation wise also; easy-peasy to understand. I don't want to bore you with a lot of non sense. Let's see how I set up my easy .drone.yaml file for my automation.
My Drone-CI (YAML) Automation File
In that file, I'm working with multiple pipelines which is one for the production environment and the other one for staging. Each of them relies on two plugins; one for building and pushing the image (i.e. plugins/docker) and the other one for applying the changes on the current running environment (i.e. appleboy/drone-ssh). The second one actually connects to the cluster through SSH and then executes some commands to refresh/update the service. All sensitive credential values can be added as a secret to Drone.IO so that we just call them by their variable when ever we want to use them.