Skip to content

The Enterprise CI/CD Landscape

What this lesson gives you

GitHub Actions, GitLab CI, Jenkins, Azure Pipelines, CircleCI — the major tools differ in hosting model and philosophy, but share the same concepts. Consulting value comes from portable assessment, not platform memorization.

Estimated time: 17 min read · Part: CI/CD Foundations

Learning Objectives

After this lesson you will be able to: (1) describe the major CI/CD platforms and their hosting models; (2) explain the SaaS vs. self-hosted runner tradeoff; (3) identify when a client needs self-hosted runners; (4) assess any CI/CD setup using platform-agnostic criteria; (5) frame a CI/CD migration discussion in terms of strategic value rather than syntax.

The Major Platforms

Enterprises run a range of CI/CD platforms. The differences that matter in consulting are hosting model (SaaS vs. self-hosted), ecosystem integration, and extensibility. You will rarely get to choose the tool — the question is how to make the best use of what exists, and when to recommend a migration.

Tool Hosting model Strengths Typical fit
GitHub Actions SaaS + self-hosted runners Native GitHub integration, huge marketplace, OIDC support, generous free tier GitHub-hosted projects, open source, modern greenfield
GitLab CI/CD SaaS or fully self-hosted Single integrated DevOps platform (SCM + CI + registry + security), strong self-host Orgs wanting one self-hosted tool, regulated industries
Jenkins Self-hosted (always) Maximum flexibility via plugins (2000+), full control, no vendor lock-in Large enterprises with entrenched investment, complex pipelines
Azure Pipelines SaaS + self-hosted agents Deep Azure/Microsoft ecosystem, Active Directory integration, YAML + GUI editor Microsoft-aligned organizations, .NET + Python mixed shops
CircleCI SaaS + self-hosted runners Fast cloud execution, simple config, strong Docker support, resource classes Startups, cloud-native teams, fast iteration
Buildkite SaaS control plane + your runners Your infrastructure, their orchestration — good for GPU workloads, compliance ML teams, regulated orgs needing own compute

SaaS Runners vs. Self-Hosted Runners

The runner placement decision is one of the most consequential in enterprise CI/CD architecture. A SaaS-hosted runner (GitHub's ubuntu-latest, CircleCI's cloud executors) runs on the platform vendor's infrastructure — you get a fresh, ephemeral environment with no maintenance overhead. A self-hosted runner is software you install on your own machines; it makes an outbound connection to the CI control plane and polls for jobs, so no inbound firewall hole is needed.

SaaS vs. Self-Hosted: The Taxi vs. Personal Car Analogy

SaaS-hosted runners are like a taxi service: convenient, always available, no maintenance, but the driver (vendor) controls the vehicle, you can't take it into restricted areas, and someone else might have used the same car before you. Self-hosted runners are your own car: full control, can go anywhere including inside a private building (your data center), but you pay for maintenance and insurance. Most enterprises use both: SaaS for public open-source work, self-hosted for anything touching internal systems.

Dimension SaaS-hosted runner Self-hosted runner
Setup & maintenance None — vendor managed You install, patch, scale
Private network access No — external cloud only Yes — runs inside your network
Data residency / compliance Data leaves your environment Data stays in your control
Specialized hardware (GPU) Limited / expensive Attach your own hardware
Cost at scale Per-minute billing; can be high Fixed infra cost; better at high volume
Consistency Fresh ephemeral environment each run Must manage state / image hygiene

Migration Discussions: Jenkins to Modern Platforms

Many enterprises still run Jenkins, often installed years ago by a team that has since moved on. Jenkins is powerful but carries significant operational overhead: the JVM, plugin management, plugin compatibility issues, and a Groovy-based DSL that has a steep learning curve. When a client asks about migrating to GitHub Actions or GitLab CI, the conversation is strategic, not syntactic.

Consulting Lens: The CI/CD Migration Conversation

When a client wants to migrate from Jenkins to GitHub Actions (or any platform), the assessment questions are: (1) Plugin inventory — which of the 50 Jenkins plugins in use have a GitHub Actions equivalent? (2) Runner strategy — can all jobs move to SaaS runners, or do some need on-prem access? (3) Team skills — YAML is easier than Groovy for most developers; this is usually a win. (4) Cost model — how do GitHub Actions minutes compare to self-hosted Jenkins at this team's volume? (5) Migration risk — run old and new pipelines in parallel on a pilot project before cutting over. The strategic framing: modernizing CI/CD reduces the 40% of dev time teams often spend on pipeline maintenance, speeds up the feedback loop, and enables the DORA improvements the business cares about.

Jenkinsfile (classic)
// A typical Jenkins Declarative Pipeline — Groovy-based
pipeline {
    agent any
    stages {
        stage('Install') {
            steps {
                sh 'pip install -r requirements.txt'
            }
        }
        stage('Test') {
            steps {
                sh 'pytest tests/ --junitxml=results.xml'
            }
        }
    }
    post {
        always {
            junit 'results.xml'
        }
    }
}

The Concepts Transfer

The Jenkins Declarative Pipeline has: an agent (runner), stages, steps with sh (shell commands), and a post block (like GitHub Actions if: always() for cleanup). The vocabulary maps directly. What looks different is the syntax (Groovy vs. YAML) and the execution model (Jenkins server vs. GitHub-managed runners). Being able to read a Jenkinsfile and identify the pipeline structure — and then explain what the equivalent GitHub Actions YAML would look like — is a concrete consultant skill.

WHY platform diversity matters You will walk into clients running any of these tools. The consultant's value is platform-agnostic assessment and the ability to reason about trade-offs — not knowing every YAML key of every tool.

HOW five assessment questions Speed, test coverage, security scanning, deployment safety, runner placement. These five questions apply to any CI/CD platform and give you a complete picture of maturity and risk.

WHERE enterprise engagements Use the self-hosted runner conversation as a bridge to hybrid infrastructure (Part 12 and 13) — on-prem runners are often the first thing that surfaces when a client starts modernizing their CI/CD pipeline.

Knowledge check

InterviewA client's CI builds must access a database running inside their private on-premises network. Why might SaaS-hosted CI runners be unsuitable, and what is the fix?

  • SaaS runners are always faster, so there is no issue.
  • Cloud-hosted runners cannot reach resources on a private network and may violate data-residency requirements; use self-hosted runners installed inside the client's network so jobs can access internal systems securely.
  • The database must be exposed to the public internet for CI to work.
  • CI cannot be used with on-premises databases at all.
Answer

Cloud-hosted runners cannot reach resources on a private network and may violate data-residency requirements; use self-hosted runners installed inside the client's network so jobs can access internal systems securely.

SaaS runners execute in the vendor's cloud and cannot reach resources behind a corporate firewall — and sending data through those runners may violate compliance requirements. Self-hosted runners are installed on machines inside the client's network; they make an outbound connection to the CI control plane and pull jobs. Pipeline steps then run on those machines and can access internal resources as if from any internal machine. This pattern is how enterprise CI/CD works with on-premises databases, private registries, and internal services without opening inbound firewall rules.

Knowledge check

ConceptA client is considering migrating from Jenkins to GitHub Actions. What are the two or three most important questions to ask before recommending the migration?

  • Which programming language do they use, and how many developers do they have?
  • Do their builds require access to private internal networks (runner placement)? Are their Jenkins plugins replaceable in GitHub Actions? What are the cost implications at their current build volume?
  • Whether their CEO approves of open-source tools.
  • Whether their developers know YAML, since Jenkins uses Groovy.
Answer

Do their builds require access to private internal networks (runner placement)? Are their Jenkins plugins replaceable in GitHub Actions? What are the cost implications at their current build volume?

The three strategic questions before a CI/CD migration: (1) Runner placement — if builds must reach internal systems, self-hosted runners are required on the new platform too; confirm this is feasible. (2) Plugin/feature parity — inventory Jenkins plugins that perform critical work (test result parsing, deployment integrations, security scanning) and verify equivalent Actions exist. (3) Cost model — GitHub Actions bills per minute; at high build volume self-hosted Jenkins may be cheaper. Team skill (YAML vs. Groovy) is a real consideration but usually favors the modern platform.

Exercise

A client runs GitLab CI (self-hosted) with a pipeline that: (1) runs tests on every merge request; (2) builds a Docker image and pushes to their internal Harbor registry on merges to main; (3) deploys to a Kubernetes cluster inside their data center. They are evaluating GitHub Actions. Write a one-page assessment covering: runner strategy, registry integration, deployment access, security model, and your recommendation.

Show solution
Assessment: GitLab CI → GitHub Actions for ACME Client

RUNNER STRATEGY
Current: GitLab runners self-hosted inside the data center.
GitHub Actions: Requires self-hosted runners for the same reasons —
builds must reach internal Harbor registry and K8s cluster.
Recommendation: Deploy GitHub Actions self-hosted runners inside the DC.
This is low-risk: runners make outbound connections only; no firewall changes.

REGISTRY INTEGRATION
Current: Harbor (internal) receives docker push from runners inside DC.
GitHub Actions: With self-hosted runners, docker push to Harbor works
identically. No change to Harbor configuration needed.

DEPLOYMENT ACCESS
Current: kubectl runs from inside DC via self-hosted runner.
GitHub Actions: Same — kubectl on the self-hosted runner reaches the
internal K8s API server. Alternatively, use a GitOps tool (Argo CD) that
pulls from the registry rather than being pushed to from CI.

SECURITY MODEL
Current: Credentials stored as GitLab CI/CD variables.
GitHub Actions: Secrets stored in GitHub repository/environment secrets.
For cloud deployments OIDC is available; for internal Harbor/K8s,
secrets stored as environment-scoped secrets in GitHub.
Risk: secrets leave the GitLab system; ensure GitHub org security policies
(SSO, secret scanning, branch protection) are configured before migration.

RECOMMENDATION
Migration is feasible with self-hosted runners. Primary benefit: GitHub
Actions has a larger marketplace and better developer ergonomics. Primary
cost: self-hosted runner maintenance (same as current GitLab runners, so
no net increase). Suggested approach: pilot on one non-critical service,
run both pipelines in parallel for 2 sprints, then cut over.

Key Takeaways

  • GitHub Actions, GitLab CI, Jenkins, Azure Pipelines share the same core concepts — hosting model and ecosystem differ.
  • SaaS runners: convenient, no maintenance, can't reach private networks. Self-hosted: full control, on-prem access, more ops.
  • Assess any CI/CD setup on: speed, test coverage, security scanning, deployment safety, runner placement.
  • Jenkins migrations are strategic conversations — assess plugin parity, runner strategy, cost, and team retraining.
  • Your consulting value is portable assessment, not platform syntax memorization.