🚀 Executive Summary

TL;DR: The article addresses the common paralysis in choosing CI/CD tools by advocating for context-driven decisions rather than seeking a ‘best’ solution. It proposes three paths: leveraging existing SCM integrations, making intentional platform choices for complex needs, or using minimalist bash scripts for small projects to prioritize shipping code.

🎯 Key Takeaways

  • The most effective CI/CD tool is often the one integrated with your existing Source Code Management (SCM) system, such as GitHub Actions for GitHub or GitLab CI for GitLab, due to significantly reduced friction.
  • For complex requirements like Kubernetes-native deployments, self-hosting for compliance, or dedicated internal platforms, an intentional platform choice (e.g., ArgoCD for GitOps CD, Jenkins for self-hosted power) is necessary.
  • Simple ‘Bash and a Dream’ shell scripts can automate deployments for small projects, offering speed and minimal cognitive overhead, but shift full responsibility for security, logging, and reliability to the user.

What do you guys use for CI/CD?

Tired of the endless CI/CD tool debate? A Senior DevOps Lead breaks down real-world choices, from the quick-and-dirty to the platform-perfect, to help you finally ship code without the headache.

So, What Do You *Actually* Use for CI/CD? A Senior Engineer’s Unfiltered Guide.

I still get a cold sweat thinking about it. It was 2 AM on a Saturday, a PagerDuty alert screaming about an auth service being down. The ‘fix’ was a one-line change, but our deployment process was a 15-step wiki page that involved three different people, a manual `git pull` on `prod-api-01`, and a prayer. I was the one SSH’d into the box, my fingers hovering over the enter key after a `service restart`, knowing that if I messed this up, the entire weekend was shot. We fixed it, but that feeling of pure, unadulterated terror is why CI/CD isn’t just a “nice to have.” It’s the wall between you and a 2 AM disaster.

The Real Problem: The Paralysis of Infinite Choice

I was scrolling through that Reddit thread, “What do you guys use for CI/CD?”, and I just had to smile. I saw the usual suspects: Jenkins, GitLab, GitHub Actions, CircleCI, ArgoCD… the list goes on. The junior engineers were asking for the “best” one, and the seniors were giving the classic, infuriating answer: “It depends.”

They’re not wrong, but it’s not helpful. The root cause of this debate isn’t about features; it’s about context. You’re not just choosing a tool. You’re choosing an ecosystem, a workflow, a set of skills your team needs to learn, and a line item on your budget. The sheer number of options creates a paralysis where teams spend more time debating tools than they do shipping code. Let’s fix that.

Stop Arguing, Start Shipping: Three Paths to Sanity

Forget finding the “perfect” tool. Let’s find the *right* tool for *you, right now*. Here are the three paths I see teams take, from my experience in the trenches.

1. The Pragmatist’s Path: Use What’s Already There

This is my go-to advice for any team that’s stuck. Where does your code live? If it’s on GitHub, start with GitHub Actions. If it’s on GitLab, use GitLab CI. Don’t overthink it. The friction of adopting a new, separate platform is often a project killer. Using the integrated tool is the path of least resistance, and that’s a feature, not a bug.

Is it the most powerful? Maybe not. Will you eventually hit a wall? Perhaps. But you’ll go from zero to a working pipeline in an afternoon. That’s a massive win.

A basic GitHub Actions workflow to build and push a Docker image is ridiculously simple. You can get this running in minutes:

name: Build and Push Docker Image

on:
  push:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Build and push
      uses: docker/build-push-action@v4
      with:
        context: .
        push: true
        tags: yourusername/your-app:latest

Pro Tip: The best CI/CD tool is the one your team will actually use. Reducing friction is more important than having a thousand features you’ll never touch. Start with what’s integrated.

2. The Architect’s Path: Choose Your Platform Intentionally

Okay, so you’ve outgrown the simple approach. You have complex needs: Kubernetes-native deployments, orchestrated multi-environment rollouts, strict security scanning gates, or a team dedicated to internal platforms. Now it’s time to put on your architect hat and make a deliberate choice. This means you stop asking “what’s best?” and start asking “what do we need?”

  • Do you need to self-host for compliance or cost reasons? (Look at Jenkins, or self-hosted GitLab/Gitea).
  • Are you all-in on Kubernetes? (ArgoCD or Flux should be your first stop).
  • Is your team mostly developers who want a clean, YAML-based SaaS experience? (CircleCI, TravisCI).
  • Are you a Microsoft shop? (Azure DevOps is a surprisingly powerful and integrated choice).

I put together a quick, opinionated cheat sheet to frame this decision:

Tool Primary Use Case Hosting My Unfiltered Take
Jenkins The self-hosted workhorse. Can do anything if you wrestle it enough. Self-hosted Infinitely powerful and customizable, but you become a full-time Jenkins admin. The “Groovy-files-and-a-million-plugins” approach can become a tangled mess.
GitHub Actions Tightly integrated, developer-friendly automation. SaaS Incredibly convenient and easy to start. The marketplace is great. Watch out for costs on private repos with many builds. Not as strong for complex, cross-project orchestration.
GitLab CI The all-in-one DevOps platform. SaaS / Self-hosted If you’re already on GitLab, it’s a no-brainer. The integration is seamless. The “Auto DevOps” feature is magic for getting started. Can feel a bit opinionated if you fight its workflow.
ArgoCD Declarative, GitOps continuous delivery for Kubernetes. Self-hosted (in-cluster) It’s not a CI tool (it doesn’t build your code), it’s a CD tool. And for Kubernetes, it’s the gold standard. Pairing this with GitHub Actions (for CI) is a match made in heaven.

3. The Minimalist’s Path: The “Bash and a Dream” Approach

Sometimes, all the big platforms are overkill. I’m talking about a small personal project, an internal tool, or a startup that needs to move at lightning speed. In these cases, the “nuclear option” is to blow up the idea of a formal platform entirely.

This is the hacky-but-effective solution: a simple web server listening for a webhook from GitHub, which then executes a shell script. It’s beautiful in its simplicity.

Your `deploy.sh` script on `staging-web-app-01` might look like this:

#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status.

echo "--- Deploying latest changes from main branch ---"

cd /var/www/my-app
git pull origin main

echo "--- Installing dependencies ---"
npm install --production

echo "--- Restarting application service ---"
pm2 restart my-app

echo "--- Deployment complete! ---"

Is this robust? No. Does it have a UI? No. Can it get you into trouble? Absolutely. But for a team of one or two, it can be a perfectly valid way to automate deployments without the cognitive overhead of a full CI/CD system.

Warning: This path is paved with peril. You are now responsible for the security, logging, and reliability of your “CI/CD server.” Only walk this path if you understand the risks and are willing to maintain it yourself.

My Final Take: The Tool is Not the Goal

At the end of the day, CI/CD is about one thing: delivering value to users faster and more safely. The tool is just a means to an end. Don’t let the search for the perfect tool stop you from building a good-enough process. Pick a path, get something running, and improve it over time. The team that ships is the team that wins—not the team with the most elegant YAML file.

Darian Vance - Lead Cloud Architect

Darian Vance

Lead Cloud Architect & DevOps Strategist

With over 12 years in system architecture and automation, Darian specializes in simplifying complex cloud infrastructures. An advocate for open-source solutions, he founded TechResolve to provide engineers with actionable, battle-tested troubleshooting guides and robust software alternatives.


🤖 Frequently Asked Questions

âť“ What are the main approaches to choosing a CI/CD tool?

The article outlines three paths: the Pragmatist’s Path (use integrated tools like GitHub Actions or GitLab CI), the Architect’s Path (make intentional choices based on complex needs like Kubernetes or self-hosting), and the Minimalist’s Path (simple bash scripts for small projects).

âť“ How do popular CI/CD tools like Jenkins, GitHub Actions, and ArgoCD compare?

Jenkins is a powerful, self-hosted workhorse but requires significant administration. GitHub Actions offers tight integration and ease of use for SaaS. GitLab CI provides an all-in-one DevOps platform, seamless if already on GitLab. ArgoCD is a declarative, GitOps continuous delivery tool for Kubernetes, often paired with CI tools like GitHub Actions.

âť“ What is a common implementation pitfall when selecting CI/CD tools?

A common pitfall is the ‘paralysis of infinite choice,’ where teams spend too much time debating the ‘best’ tool instead of shipping code. This can be avoided by focusing on the ‘right’ tool for the current context, prioritizing reduced friction, and iterating on the process.

Leave a Reply

Discover more from TechResolve - SaaS Troubleshooting & Software Alternatives

Subscribe now to keep reading and get access to the full archive.

Continue reading