A modern CI/CD pipeline is more than a sequence of automated jobs. It is the delivery system that turns a code change into a reliable release, with checks for quality, security, deployment safety, and operational feedback along the way. This guide explains the core CI/CD pipeline stages from commit to production, then turns that flow into a practical checklist you can reuse when building, auditing, or redesigning your software delivery workflow.
Overview
If you want one mental model for a ci cd workflow, use this: every change should move through a series of stages that answer a simple question before it advances. Did the code compile? Did the tests pass? Is the artifact reproducible? Is it secure enough to ship? Can it be deployed safely? Did it behave correctly after release?
That is the foundation of a healthy set of ci cd pipeline stages. The exact implementation varies by team, stack, and risk level, but the basic flow is stable enough to use as a checklist:
- Source stage: a developer opens a branch, pushes a commit, or merges a pull request.
- Validation stage: linting, static checks, and fast feedback catch obvious issues early.
- Build stage: the pipeline creates deployable artifacts such as binaries, containers, or packages.
- Test stage: unit, integration, contract, and end-to-end checks confirm behavior.
- Security and compliance stage: dependency, code, container, and infrastructure scanning reduce delivery risk.
- Package and publish stage: versioned artifacts are pushed to a trusted registry or repository.
- Deploy stage: the release moves into staging, pre-production, or production using a defined strategy.
- Verify stage: smoke tests, health checks, and observability data confirm the deployment is sound.
- Feedback and rollback stage: the team monitors outcomes, documents incidents, and can revert quickly if needed.
This is the continuous delivery pipeline explained in practical terms: a chain of decisions that narrows uncertainty before customers are exposed to a change. Strong pipelines do not merely automate steps. They automate confidence.
It also helps to separate CI from CD. Continuous integration focuses on proving that code changes can be merged safely and repeatedly. Continuous delivery focuses on making those changes deployable at any time. Some teams also practice continuous deployment, where approved changes ship automatically to production without a manual release gate. The right choice depends on product risk, regulatory constraints, and operational maturity.
For most teams, the goal is not to add every possible step. It is to create a path that is fast for low-risk changes, strict where it matters, and understandable to everyone who uses it. That is where many devops best practices around pipelines become practical rather than theoretical.
Checklist by scenario
Use this section as a reusable checklist. Start with the common stages, then adapt the controls to your delivery model.
1. Core stages every team should map
Regardless of tooling, these software delivery pipeline stages should be visible and named:
- Trigger: What starts the pipeline: push, pull request, tag, schedule, or manual approval?
- Pre-merge checks: Are formatting, linting, and fast tests required before merge?
- Build: Can the same artifact be reproduced reliably from source?
- Artifact storage: Where is the image, package, or binary stored, and is it versioned?
- Test progression: Which tests run early, and which run after a build is created?
- Security gates: What scans are required before promotion?
- Environment promotion: How does a release move from dev to staging to production?
- Deployment verification: What automated checks confirm a healthy rollout?
- Rollback path: Can the team reverse the change quickly and consistently?
- Feedback loop: Where do deployment events, alerts, and post-release findings go?
If your team cannot answer these questions in a few minutes, the pipeline likely exists in fragments across tools and tribal knowledge.
2. Checklist for a small application team
For a team shipping a web app, internal service, or API with moderate risk, a practical baseline often looks like this:
- Run formatting, linting, and unit tests on every pull request.
- Require code review before merge.
- Build a single deployable artifact on merge to the main branch.
- Tag the artifact with a commit SHA and semantic or release version where useful.
- Run integration tests against the built artifact, not only source code.
- Scan dependencies and containers before publishing.
- Deploy automatically to a staging environment.
- Run smoke tests after staging deploy.
- Require an approval or policy gate before production if the application is user-facing or business-critical.
- Use basic observability checks after production release: health endpoints, error rate, latency, and logs.
This is often enough to create a stable release habit without building a complex delivery platform too early.
3. Checklist for Kubernetes-based services
Kubernetes adds extra moving parts, so your devops pipeline steps should explicitly cover infrastructure concerns:
- Validate manifests, Helm charts, or Kustomize overlays before deployment.
- Check image tags are immutable and traceable to source.
- Test whether resource requests, limits, probes, and rollout settings are defined sensibly.
- Scan container images and infrastructure-as-code as part of the pipeline.
- Promote deployments using an explicit strategy such as rolling, blue-green, or canary.
- Verify cluster context and namespace before apply to avoid deploying to the wrong environment.
- Run post-deploy checks against service readiness, pod health, and ingress behavior.
- Capture rollout history so failures can be traced and reversed.
If your team uses Kubernetes heavily, pair your pipeline design with deployment strategy choices. See Kubernetes Deployment Strategies Explained: Rolling, Blue-Green, Canary, and Recreate and Kubernetes Troubleshooting Guide: Common Errors, Causes, and Fixes.
4. Checklist for high-change teams optimizing speed
When the main pain point is slow feedback, review the pipeline in this order:
- Shift fast checks left: run linting and unit tests before expensive stages.
- Parallelize where safe: split test suites and scans to reduce total runtime.
- Cache intentionally: dependencies, layers, and build outputs can cut build time when managed carefully.
- Reduce duplicate work: do not rebuild the same artifact in multiple stages.
- Use path-based or service-based triggers: monorepos often benefit from selective pipeline runs.
- Separate required gates from informational checks: not every report should block deployment.
Teams struggling with image build time should also review Docker Build Optimization Checklist for Faster CI Pipelines.
5. Checklist for teams with stronger security requirements
Security is not a single stage at the end. It is a set of controls placed where they are most useful:
- Protect branch rules and merge requirements.
- Scan source code where static analysis adds value.
- Scan open-source dependencies for known issues and license concerns where relevant.
- Scan container images after build and before publish.
- Scan infrastructure definitions before deployment.
- Sign artifacts or otherwise establish provenance if your process requires it.
- Limit production secrets exposure in CI runners.
- Review who can approve or trigger production releases.
For a deeper breakdown, see SAST vs DAST vs SCA vs IaC Scanning: What Each Security Tool Actually Catches and Software Supply Chain Security Checklist for CI/CD Pipelines.
6. Checklist for platform engineering and shared pipelines
If you support multiple teams, pipeline design becomes a developer experience issue as much as an automation issue:
- Define standard templates for common service types.
- Offer paved paths for build, test, scan, deploy, and rollback.
- Keep escape hatches for unusual workloads, but make the default path easy.
- Centralize policy where consistency matters, such as artifact naming, secret handling, and environment promotion.
- Document ownership for each stage and each failure mode.
- Expose deployment metadata to developers without requiring cluster admin knowledge.
This is where platform engineering overlaps directly with CI/CD. If you are moving toward shared self-service workflows, review Platform Engineering Roadmap: How Teams Evolve from Ad Hoc DevOps to Self-Service Platforms and Internal Developer Platform Tools Comparison: Backstage, Port, Humanitec, and More.
What to double-check
Most pipeline problems come from assumptions hidden between stages. Before you change tools or add new gates, verify these fundamentals.
Artifact consistency
The artifact tested should be the artifact deployed. If your pipeline rebuilds code between staging and production, you create avoidable drift. Versioning by commit SHA is often the simplest way to keep traceability clear.
Environment parity
Staging does not need to mirror production perfectly, but major differences in configuration, external dependencies, or infrastructure shape can make test results misleading. The more critical the service, the more carefully you should reduce those differences.
Approval logic
Manual approvals should exist for a reason, not because they were inherited from a previous process. Ask whether each approval gate reduces risk, or only delays delivery. If you keep approvals, define who owns them and when they can be bypassed during incidents.
Failure visibility
A failed job should explain what failed, where, and what the next action is. Developers should not need to inspect five tools to understand one red pipeline. Clear logs, surfaced test summaries, and deployment event links improve developer productivity tools adoption because people trust the system more.
Rollback clarity
Many teams discuss rollback but do not rehearse it. Confirm whether rollback means redeploying the previous artifact, reverting configuration, restoring data paths, or disabling traffic to a canary. Those are not the same action.
Observability after deploy
A deployment is not complete when the tool reports success. Confirm which metrics matter in the first minutes after release: error rate, latency, saturation, queue depth, or business-level checks. For teams tightening this stage, see Best Observability Tools for Kubernetes and Cloud-Native Teams and Prometheus vs Datadog vs Grafana Cloud: Monitoring Stack Comparison.
Metrics that reflect delivery health
Do not measure pipeline quality by runtime alone. Review change failure rate, deployment frequency, time to restore service, and lead time for changes where useful. These software delivery metrics are often more informative than whether one job shaved off a minute.
Common mistakes
The fastest way to improve a pipeline is often to remove a bad assumption rather than add another tool. These mistakes appear frequently across teams and stacks.
- Treating CI/CD as a single YAML file problem. Pipelines reflect branching strategy, environment design, artifact management, deployment safety, and team ownership. Tool syntax matters less than system design.
- Running every check on every change. A good pipeline is risk-based. Cheap checks should run often. Expensive checks should run where they provide real confidence.
- Making production deployment a special manual ritual. The more production differs from earlier stages, the more fragile delivery becomes.
- Ignoring test data and environment setup. Integration tests fail for reasons unrelated to code if dependent systems are unstable or seeded inconsistently.
- Failing to version infrastructure and deployment config with the same discipline as application code. Hidden config drift can undermine an otherwise strong pipeline.
- Using long-lived feature branches without integration discipline. CI works best when changes merge frequently and conflicts surface early.
- Adding security scanning without ownership. Reports do not improve security unless someone triages and acts on them.
- Optimizing for local team convenience while hurting organizational consistency. Shared templates and standards are not bureaucracy if they reduce cognitive load and onboarding time.
- Skipping post-deploy verification. A successful deployment command only means the command completed, not that users are unaffected.
If your team is also evaluating deployment models, compare your current setup against a GitOps-style approach in GitOps Tools Comparison: Argo CD vs Flux vs Traditional CI/CD Deployments.
When to revisit
A pipeline should be reviewed whenever the underlying delivery assumptions change. This is where the guide becomes reusable rather than one-time reading.
Revisit your pipeline stages:
- Before planning cycles: especially when teams set quarterly goals around release speed, reliability, or security posture.
- When tools change: moving from Jenkins to newer tooling, adopting GitHub Actions, or reworking registries and runners can expose old design flaws.
- When architecture changes: monolith to microservices, VMs to containers, or containers to Kubernetes all change what good pipeline stages look like.
- When incident patterns repeat: if releases frequently fail for the same reason, the pipeline is missing a check, a signal, or a safe promotion rule.
- When compliance or customer expectations evolve: stronger auditability, approval logic, or artifact controls may be needed.
- When onboarding is too slow: if new developers struggle to understand how code reaches production, your pipeline likely needs simplification and clearer defaults.
For a practical next step, run this short review with your team:
- Draw your current pipeline from commit to production on one page.
- Name every stage in plain language.
- Mark which stages are required, informational, manual, or automated.
- List the top three slowest steps and the top three riskiest gaps.
- Choose one speed improvement and one risk reduction to implement next.
- Document rollback ownership and post-deploy verification before the next release.
The best CI/CD pipelines are not the most elaborate. They are the ones teams can understand, trust, and improve over time. If you use this article as a recurring checklist whenever workflows or tools change, it will help keep your delivery process fast enough for developers and safe enough for production.