RSS Amplifier

Pavlin Gunov: PhD Engineering Student & Software Specialist · Aug 12, 2026

Workflows vs Pipelines: The Semantic Difference

0
Sign in to vote or save

Pavlin Gunov · Pavlin Gunov

GitHub calls it a workflow. GitLab calls it a pipeline. Jenkins has both. Most teams use the terms interchangeably until something breaks during migration.

The distinction matters because these concepts solve different problems. Understanding the difference changes how you architect CI/CD systems, not just what you call them.

The Naming Problem

Every major CI/CD platform picked different terminology:

  • GitHub Actions: Workflow (the YAML file defines a workflow)
  • GitLab CI/CD: Pipeline (the YAML file defines a pipeline)
  • Bitbucket: Pipelines (the product name and the YAML concept)
  • Jenkins: Both (Jenkinsfile defines a pipeline; larger systems use workflows)

These tools do roughly the same things. The names are marketing decisions, not technical distinctions. But the underlying concepts-workflow and pipeline-represent different architectural patterns.

Conflating them causes real problems. I’ve seen teams spend days replicating Jenkins pipeline logic in GitHub Actions by treating stages as jobs, only to discover that jobs run on separate runners with no shared state. The translation failed because they mapped terminology instead of understanding the execution model.

What a Pipeline Actually Is

A pipeline is an execution pattern. It defines a sequence of stages where each stage’s output becomes the next stage’s input. The flow is linear and deterministic.

Characteristics:

  • Sequential execution (stage N+1 depends on stage N)
  • Data or artifacts flow forward through stages
  • No branching, no conditional paths
  • No event handling or orchestration logic

Pure Pipeline Structure

A pipeline is pure execution flow: sequential stages with data flowing forward

Classic example: Build → Test → Deploy

The build stage produces artifacts. The test stage consumes those artifacts. The deploy stage consumes tested artifacts. Each stage is a transformation applied to the output of the previous stage.

This is a pipeline because it models data flow through transformations, not decision logic.

What a Workflow Actually Is

A workflow is a decision pattern. It defines what runs, when it runs, and under what conditions. It handles orchestration, coordination, and control flow.

Characteristics:

  • Event-driven (triggered by push, PR, schedule, manual action)
  • Conditional execution (if statements, branch filters, manual gates)
  • Parallel execution (independent jobs running concurrently)
  • Orchestration logic (deciding what happens based on context)

Workflow Structure with Orchestration

A workflow coordinates jobs, handles events, and makes decisions

A workflow can call pipelines. A workflow can look like a pipeline. But a workflow is fundamentally about control flow, not data flow.

The Critical Difference

Pipelines don’t listen. Workflows listen.

If your automation reacts to events-a git push, a pull request, a timer-it’s a workflow. Pipelines execute when called; they don’t decide when to run.

Event Handling: Workflow vs Pipeline

Workflows react to events; pipelines are invoked by callers

Pipelines don’t branch. Workflows branch.

If your automation can skip steps, run parallel tracks, or diverge based on conditions, it’s a workflow. Pipelines execute sequentially from start to finish.

Pipelines are execution. Workflows are orchestration.

A pipeline is a fixed sequence of operations. A workflow coordinates what operations run and in what order.

Why GitHub Got It Right (Technically)

GitHub Actions calls them workflows because that’s what they are. Even when you write this:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: make build
  
  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - run: make test

You’ve written a workflow that happens to execute jobs sequentially, resembling a pipeline. But it’s still a workflow because:

  1. It triggers on events (on: push)
  2. Each job runs on a separate runner (no guaranteed state sharing)
  3. You can add conditional logic, parallel jobs, or manual approvals without changing the model

GitHub Actions: Workflow That Looks Like a Pipeline

Linear execution shape doesn't make it a pipeline-it's still workflow orchestration

GitHub workflows can model pipelines. But they remain workflows.

Why GitLab’s Naming Causes Confusion

GitLab CI/CD calls the YAML file a pipeline, but the system behaves like a workflow:

  • Triggers on events
  • Supports parallel jobs
  • Supports conditional execution
  • Supports manual jobs

The product is called “GitLab CI/CD Pipelines” because “pipeline” was already familiar terminology when GitLab launched CI features. But what you’re actually defining is a workflow that often contains pipeline-like sequences.

This isn’t wrong, but it does blur the conceptual line.

A Workflow Can Contain a Pipeline

This is the relationship most people miss:

Workflow Containing Multiple Pipelines

A workflow can invoke multiple pipelines, potentially in parallel

A workflow can invoke a pipeline. A workflow can invoke multiple pipelines. A workflow can run pipelines in parallel or conditionally.

But a pipeline cannot invoke a workflow. A pipeline cannot decide when to run. A pipeline is purely execution.

When Shape Doesn’t Determine Type

Here’s the critical insight: linear execution does not make something a pipeline.

Case 1: Simple linear workflow

Linear Workflow (Still Not a Pipeline)

Linear shape, but still a workflow (has event trigger and orchestration)

Case 2: Parallel execution workflow

Parallel Workflow (Definitely Not a Pipeline)

Parallel execution is a clear workflow pattern-pipelines are sequential

Case 3: Conditional workflow

Conditional Workflow with Branching

Branching and conditions are workflow behaviors-impossible in pure pipelines

Why are all of these workflows and not pipelines? Because they still handle orchestration (event triggers, job coordination, conditional logic). The execution shape doesn’t change what they are.

The Mental Test

To determine what you’re actually building, remove all triggers and conditions:

  • If it still makes sense as a standalone sequence of operations → pipeline
  • If it stops making sense without the triggering context → workflow

Example 1: build → test → deploy makes sense as a standalone pipeline. You could call it from anywhere.

Example 2: on: push → build → if: main branch → deploy does not make sense without the workflow context. The decision logic is part of the definition.

Migration Gotcha

When moving from Jenkins to GitHub Actions, don't map Jenkins stages to GitHub jobs one-to-one. Jenkins stages run on the same agent and share filesystem state. GitHub jobs run on separate runners. If your stages depend on shared state, you need to rethink your architecture, not just translate YAML.

Practical Implications

When migrating between platforms:

  • Don’t map Jenkins stages to GitHub jobs one-to-one
  • Jenkins stages share workspace and state; GitHub jobs don’t
  • Understand the execution model before translating YAML

When designing automation:

  • Need event handling, conditions, or parallel execution? You need a workflow.
  • Need a reusable sequence of transformations? Build a pipeline.
  • Need both? Build a pipeline and invoke it from a workflow.

When debugging failures:

  • Workflow failure: orchestration problem (triggers, conditions, dependencies)
  • Pipeline failure: execution problem (stage logic, artifacts, environment)

The Complete Mental Model

The Full Relationship Between Workflows and Pipelines

Workflows orchestrate when and what; pipelines execute how

The Classification Rule

Here’s a simple decision tree you can apply to any CI/CD configuration:

Does it react to external events (push, PR, schedule)?

  • Yes → It’s a workflow
  • No → It might be a pipeline

Does it contain conditional logic or branching?

  • Yes → It’s a workflow
  • No → It might be a pipeline

Can you execute it standalone without context?

  • Yes → It’s a pipeline
  • No → It’s a workflow

Does it coordinate multiple independent processes?

  • Yes → It’s a workflow
  • No → It might be a pipeline

If you answered “workflow” to any of these, it’s a workflow. Even if it looks linear.

Takeaway

A pipeline is an execution model: sequential stages with data flowing forward.

A workflow is a decision model: orchestration logic that determines what runs and when.

Most CI/CD tools implement workflows. Some workflows look like pipelines. That doesn’t make them pipelines.

The distinction becomes critical when you add complexity-parallel jobs, conditional execution, manual gates. At that point, treating your workflow as a pipeline will cause architectural mistakes.

Use the correct mental model for what you’re building. Your automation architecture will be clearer for it.


Quick reference:

AspectPipelineWorkflow
PurposeExecute sequenceOrchestrate logic
FlowData flowControl flow
TriggersNone (called)Events, schedules
BranchingNoYes
ParallelismNoYes
ReusabilityHigh (called from workflows)Medium (can call pipelines)
Mental model”What steps run""When and what runs”

Stay up to date

Get notified when I publish something new, and unsubscribe at any time.

Read the original on pavlinbg.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.