DEV Community

Karolis for Webhook Relay

Posted on • Updated on

What's your favourite CI/CD tool and why?

Throughout the years I have seen many companies using different tools to achieve same/similar things in CI/CD area. There's no denying that Jenkins is probably the most widely used solution due to the huge amount of available integrations and plugins. There are, however, some downsides such as resource consumption that can become very expensive at scale. I always remember this great article from Monzo Building a Modern Bank Backend that was mostly about migrating from Mesos to Kubernetes, but it does have some important points such as:

Previously, we ran several very beefy Jenkins hosts dedicated to the task, which were inefficient and expensive. Now, build jobs run under Kubernetes, using spare capacity in our existing infrastructure, which is basically free. - Oliver Beattie

Similar issues I have noticed in other companies, such as disks getting full due to growing workspaces or just agents getting quite slow due to insufficient host resources. Most of these issues could be labelled as user configuration problem, but then it seems that they don't exist in other systems.

My favourite tools to automate tasks:

  • Google Cloud Build - powerful and cheap alternative to CircleCI/Travis. If you are running on GCP, I would definitely recommend looking into it as for most users it will be running for free :0
  • Gitlab CI/CD + runners. A great model, probably designed based on drone.io server/agent model. Nevertheless, works great most of the time :)
  • Drone - very lightweight solution that you can run even on your desktop or on any server. Pipelines are defined in the same repo as your code and all builds happen in containers, so no issues with dirty workspaces or tying them to individual hosts.

It would be interesting to know what tools other people are using and why, please write your answer in the comments! :)

Top comments (28)

Collapse
 
gijovarghese profile image
Gijo Varghese

I've been a big fan of GitLab CI/CD.

But recently moved away

Now:
Static sites - Netlify
API servers running in Google Cloud - buddy.works

buddy.works is very new, but very easy to setup.

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao

My company uses Gitlab CI/CD + runners model as we self-host gitlab on our servers. So I really like how it comes with it which I didn't know that it's possible when I was using GitHub beside the use of Travis CI

Collapse
 
cjbrooks12 profile image
Casey Brooks

I've been using Azure Pipelines at work and liked it so much that I've started testing Orchid with it as well, with the hope of eventually replacing Travis CI with it.

I develop on a Mac locally and am having trouble with the Windows builds (which I'm not seeing on AppVeyor, BTW), which is a blocker for me using is exclusively right now. But other than that, it's really easy to set up and very powerful.

Collapse
 
gillchristian profile image
Christian Gill

Concourse CI is pretty neat. I used only once in my previous company so I cannot share much experience with it.

If you want to see it in action, their pipeline is public.

Collapse
 
danielsiefert profile image
Dan Siefert

Gitlab, like the all in-one but we aren't doing anything too advanced.

Collapse
 
vishnuharidas profile image
Vishnu Haridas

Used Jenkins for building Android and iOS apps, and send out a formatted email with Git Log with the build attached to all the testers. Then when Gmail stopped allowing APK attachments, we used to push the APKs to either S3 or a local machine and serve using a simple Python HTTP server, and send out the link to testers.

Jenkins allowed to pass parameters every time I build it.

Later moved to GitLab CI/CD, and I manually download the artifacts and upload it in Google Drive and send email to testers.

Collapse
 
socr4tesjohnson profile image
socr4tesjohnson

My team is on Azure Devops and love it. This article is interesting to me because my company is wanting to use Jenkins and I think it's a mistake. There seem to be better options.

Collapse
 
jessekphillips profile image
Jesse Phillips

I don't have much outside Jenkins and gitlab, toughed some of Travis.

I prefer gitlab, but it is much more opinionated than Jenkins. My experience so far is nah environment management sucks and Kerbernetes is a big lift especially exists code bases.

Collapse
 
optomos profile image
optomos

We have Gitlab, Jenkins, VSTS(Azure DevOps) and TeamCity. I personally like TC because of its ease to configure, out of the box plug-ins and great documentation.

Collapse
 
krusenas profile image
Karolis

During one project I also had a chance to use TC, really liked it, however due to budget constraints we had to go with Jenkins :) How does it currently work with containers?

Collapse
 
optomos profile image
optomos

That's understandable and the reason we have three environments. One for Unit tests, one for automation and one for CI. There's advantages and disadvantages to having one large environment compared to multiple, but it's worked for us so far and TC adding 100 build configurations has helped.

It works great with containers, but we don't do anything advanced with Docker. A lot more time was spent spinning up 2016 agent servers, enabling and configuring Docker on Windows and all the dev work for it to work with swarm.

Collapse
 
jcoelho profile image
José Coelho

I'm using Jenkins for its flexibility. Most of the projects I work with are Legacy and lack most of the Industry's standards.

Jenkins allows me to workaround that.

Collapse
 
joshhadik profile image
Josh Hadik • Edited

Travis CI - Open Source Projects
GitLab CI - Private Projects
AWS CodePipeline / Google Cloud Build - Projects that rely heavily on AWS / GCP respectively.

Collapse
 
krusenas profile image
Karolis

I have looked at Spinnaker a year ago, at that time you had to use both Redis and Cassandra as databases for it. It seems like most of the infrastructure costs would go to feed the spinnaker instead of the actual backend applications.. :D

Collapse
 
v4r15 profile image
v4r15 • Edited

Gitlab CI/CD on self hosted Gitlab + one big runner for builds (creates raw artifacts and docker images) set up to run concurrent jobs, and one runner per env for CD.
Working on shifting to plain K8S fed from the images built by the builder mentioned above.

Collapse
 
iamksam profile image
ɯɐSʞɯɐᴉ

CA Release Automation, I get why people use Jenkins as a deployment tool as well as a build tool but it's not designed for deployment.. No built-in structure for it, it has to be tweaked to work unlike Bamboo which builds and deploys and can maintain branch separation

Collapse
 
jwp profile image
John Peters • Edited

Jenkins, to me is the most miserable piece of software I've ever used in my 30 years in IT. My company uses it so I have to use it too. For my project when I open the configuration page I see about 10 pages and hundreds of options. My project uses only Git integration, virtual machines and powershell. Everthing else is worthless. There's so much wrong with Jenkins, it makes me ill to work with it.